在对模型做序列化时(比如在控制器中返回一个模型对象,这个模型就会被 JSON 序列化),会把 $appends
中列出的访问器也序列化进来。
以优惠券模型为例,优惠券的数据库结构中原本没有 description
字段,如果没有将 description
放入 $appends
属性,那么控制器返回优惠券模型时,前端拿到的对象是没有 description
字段的。
在对模型做序列化时(比如在控制器中返回一个模型对象,这个模型就会被 JSON 序列化),会把 $appends
中列出的访问器也序列化进来。
以优惠券模型为例,优惠券的数据库结构中原本没有 description
字段,如果没有将 description
放入 $appends
属性,那么控制器返回优惠券模型时,前端拿到的对象是没有 description
字段的。
@leo 老师,为什么在地址模型里的 getFullAddressAttribute()
方法不需要加 $appends = ['full_address']
就可以使用?
在不加 $appends = ['description']
的时候在 tinker 中可以正常访问,上面提到的序列化又是什么东东?一般什么时候模型会被序列化?
@leo 看过文档了还是有疑问。full_address,image_url 这些都没有加入 $appends,同样是从控制器返回,在前端页面都能访问到。为啥就 description 不能,只有这个属性是在 laravel-admin 控制器里使用的,难道是 admin 的锅?
@hehorange 这个地方确实和 Laravel-Admin 有关系,Laravel-Admin 在实现相关代码时是先对模型执行了一次 ->toArray()
然后再从这个结果中提取数据,如果没有把 description
加入到 $appends
中则不会被输出到 toArray()
的结果中。
在对模型做序列化时(比如在控制器中返回一个模型对象,这个模型就会被 JSON 序列化),会把
$appends
中列出的访问器也序列化进来。以优惠券模型为例,优惠券的数据库结构中原本没有
description
字段,如果没有将description
放入$appends
属性,那么控制器返回优惠券模型时,前端拿到的对象是没有description
字段的。参考文档 https://learnku.com/docs/laravel/5.5/eloquent-seri...