这是我的分类模型:
/**
* @var array
*/
protected $guarded = ['id'];
public function media()
{
return $this->belongsTo(Media::class);
}
public function getMediaAttribute()
{
return 'Foo';
return ( ! is_null($this->media))
? $this->media
: '/products/default/thumb.jpg';
}
当我在路线中调用它来获取所有这样的对象时:
return \App\Category::with('media')->get();
似乎存取器不起作用,我无法在类别的媒体对象中获得'Foo'
答案 0 :(得分:2)
您可以使用withDefault()
:
public function media()
{
return $this->belongsTo(Media::class)
->withDefault(['url' => '/products/default/thumb.jpg']);
}
如果没有结果,则返回具有给定属性的Media
实例。
答案 1 :(得分:-1)
这不是laravel访问者的工作方式
如果您创建了
public function getMediaAttribute()
{
return 'Foo';
return ( ! is_null($this->media))
? $this->media
: '/products/default/thumb.jpg';
}
然后您将访问它:
return \App\Category::first()->media;
它将作为'附加字段'可以通过各种方式为您的模型进行操作,在本例中为模型类别
更多信息: https://laravel.com/docs/5.6/eloquent-mutators#defining-an-accessor
同样如你问题的评论所述,与关系同名的访问者将覆盖具有给定名称的原始字段,我不是100%确定关于覆盖的最后一部分,那是怎样的它适用于mutators,我认为它与访问器相同