protected $appends = ['description']; 有点疑惑?

这个主要做什么的?

欲速则不达
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

在对模型做序列化时(比如在控制器中返回一个模型对象,这个模型就会被 JSON 序列化),会把 $appends 中列出的访问器也序列化进来。

以优惠券模型为例,优惠券的数据库结构中原本没有 description 字段,如果没有将 description 放入 $appends 属性,那么控制器返回优惠券模型时,前端拿到的对象是没有 description 字段的。

参考文档 https://learnku.com/docs/laravel/5.5/eloquent-seri...

5年前 评论
讨论数量: 7
leo

在对模型做序列化时(比如在控制器中返回一个模型对象,这个模型就会被 JSON 序列化),会把 $appends 中列出的访问器也序列化进来。

以优惠券模型为例,优惠券的数据库结构中原本没有 description 字段,如果没有将 description 放入 $appends 属性,那么控制器返回优惠券模型时,前端拿到的对象是没有 description 字段的。

参考文档 https://learnku.com/docs/laravel/5.5/eloquent-seri...

5年前 评论
leo

在对模型做序列化时(比如在控制器中返回一个模型对象,这个模型就会被 JSON 序列化),会把 $appends 中列出的访问器也序列化进来。

以优惠券模型为例,优惠券的数据库结构中原本没有 description 字段,如果没有将 description 放入 $appends 属性,那么控制器返回优惠券模型时,前端拿到的对象是没有 description 字段的。

参考文档 https://learnku.com/docs/laravel/5.5/eloquent-seri...

5年前 评论

@leo 老师,为什么在地址模型里的 getFullAddressAttribute() 方法不需要加 $appends = ['full_address'] 就可以使用?
在不加 $appends = ['description'] 的时候在 tinker 中可以正常访问,上面提到的序列化又是什么东东?一般什么时候模型会被序列化?

5年前 评论
leo

@hehorange 建议多看几遍文档,文档已经描述得很清晰了

5年前 评论

@leo 看过文档了还是有疑问。full_address,image_url 这些都没有加入 $appends,同样是从控制器返回,在前端页面都能访问到。为啥就 description 不能,只有这个属性是在 laravel-admin 控制器里使用的,难道是 admin 的锅?

4年前 评论
leo

@hehorange 这个地方确实和 Laravel-Admin 有关系,Laravel-Admin 在实现相关代码时是先对模型执行了一次 ->toArray() 然后再从这个结果中提取数据,如果没有把 description 加入到 $appends 中则不会被输出到 toArray() 的结果中。

4年前 评论

@leo :blush:谢谢老师,这下知道了

4年前 评论

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