【发布时间】:2020-06-11 10:04:12
【问题描述】:
我有一个带有购物车功能的用户模型,它在加入三个表格后返回所有购物车详细信息。我想将属性转换为 JSON 类型的数组。
示例:我有四个表 users、carts、item_detail_informations 和 item_details 表,其中 item_details 表 图片列是 JSON 类型。我想将图片 JSON 数据转换为数组。
我的购物车功能是这样的。
public function carts()
{
return $this->hasMany('App\Models\Cart')
->join('item_detail_informations', 'carts.item_detail_information_id','=','item_detail_informations.id')
->join('item_details', 'item_detail_informations.item_detail_id','=','item_details.id')
->join('items', 'item_details.item_id','=','items.id')
->select('carts.user_id','carts.item_detail_information_id','item_detail_informations.size','item_detail_informations.price','item_detail_informations.item_detail_id', 'item_details.picture','item_details.item_id')
;
}
我正在尝试像这样投射图片属性。
protected $casts = [
'item_details.picture' => 'array',
];
但它不起作用。有没有办法把图片属性转成JSON?
【问题讨论】:
-
您需要在
ItemDetail模型中强制转换属性,并删除所有连接并通过witheloquent 方法执行。所以return $this->hasMany('App\Models\Cart')->with(['items', 'item_details', 'item_detail_informations']) -
与用户表和项目表没有直接关系,所以我得到
Call to undefined relationship [items] on model [App\Models\Cart] -
carts 模型内部,有一个关系方法名
itenDetailInformation。所以如果我这样写return $this->hasMany('App\Models\Cart')->with(['itemDetailInformation'])我可以访问 item_detail_informations 表但我不能访问其他表。 -
好的,然后添加其他关系。加入你不能改变 eloquent,因为
join与QueryBuilder一起工作,你需要EloquentQueryBuilder。所以在这种情况下,添加其他关系,雄辩的会做其他事情。
标签: laravel eloquent casting query-builder eloquent-relationship