我的Post模型具有以下关系:
public function prices() {
return $this->morphedByMany('App\Price', 'postable');
}
我有一个单独的带有栏的表postables:
- postable_id
- postable_type
- custom (type: json)
为什么当我想做的事情:$post->pivot->custom
我得到空值,为什么?当我执行dd($post)
时,在集合中找不到列custom
。
答案 0 :(得分:2)
定义关系时必须指定自定义属性,如下所示:
public function prices() {
return $this->morphedByMany('App\Price', 'postable')->withPivot('custom');
}
如果要转换自定义属性,则必须为数据透视表创建一个模型,如下所示:
use Illuminate\Database\Eloquent\Relations\Pivot;
class Postable extends Pivot
{
protected $casts = [
'custom' => 'array',
];
}
在您的关系定义中引用此模型:
return $this->morphedByMany('App\Price', 'postable')
->using('App\Postable')
->withPivot('custom');
现在您可以像这样检索值:
foreach ($post->prices as $price) {
echo $price->pivot->custom;
}