关于 App/Transformers/ReplyTransformer.php 中的一个疑问?

app/Transformers/ReplyTransformer.php 中进行了(int)声明,这是为什么呢?

namespace App\Transformers;

class ReplyTransformer extends TransformerAbstract
{
    public function transform(Reply $reply)
    {
        return [
            'id' => $reply->id,
            'user_id' => (int) $reply->user_id,    //这里为什么要 int 转换
            'topic_id' => (int) $reply->topic_id,   //这里为什么要 int 转换
            'content' => $reply->content,
            'created_at' => $reply->created_at->toDateTimeString(),
            'updated_at' => $reply->updated_at->toDateTimeString(),
        ];
    }
}

数据库中replies表中的 user_id,topic_id 本身就是 int 类型,以上程序获取值的时候为什么还要进行int转换,有这个必要么?求解

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
liyu001989
最佳答案

只是为了确保数据类型正确。

比如创建的时候,我们对对象的属性进行赋值,有可能是直接使用 $request 中的值,假设这个时候忘记了做类型转换,直接使用 $reply->foobar_id = $request->foobar_id; 你会发现其实 foobar_id 是个字符串,最后直接将 $reply 传给transformer 进行转换就会有问题了。

file

5年前 评论
讨论数量: 5
liyu001989

只是为了确保数据类型正确。

比如创建的时候,我们对对象的属性进行赋值,有可能是直接使用 $request 中的值,假设这个时候忘记了做类型转换,直接使用 $reply->foobar_id = $request->foobar_id; 你会发现其实 foobar_id 是个字符串,最后直接将 $reply 传给transformer 进行转换就会有问题了。

file

5年前 评论

细节处更能体现经验的重要,谢谢你的指教~~ :stuck_out_tongue_closed_eyes:

5年前 评论

@liyu001989
新手,这里不是很明白:“最后直接将 $reply 传给transformer 进行转换就会有问题了”, 这里什么情况下转换才会有问题?简单赋值,不做全等与类型判断应该不会有什么问题吧?

5年前 评论
liyu001989

@FreeMason 对php来说没什么问题,对客户端(ios,android)来说字符串就该是字符串,数字就该是数字,transformer 里面可以注意一下 'user_id' => (int) $reply->user_id, 这样更适合

5年前 评论

@liyu001989
哦,原来是这么回事。学习到了,谢谢。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!