有没有办法在 laravel 中转换关系 table 属性?

Is there any way to cast a relationship table attribute in laravel?

我有一个带有购物车功能的用户模型,在加入三个 table 后 returns 所有购物车都详细说明。我想将属性转换为 JSON 类型的数组。

示例: 我有四个 table users, carts, item_detail_informations,并且 item_details tables 其中 item_details table 图片栏是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?

删除 carts 方法中的所有连接(而不是通过 with 使用预先加载)。并在 ItemDetail 模型中转换属性。当您调用 carst 方法时,它会自动拾取。希望对您有所帮助

您需要改用eager loading