Laravel中关系对象的访问器

时间:2018-06-06 21:28:42

标签: php laravel laravel-5 eloquent

这是我的分类模型:

/**
 * @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'

2 个答案:

答案 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,我认为它与访问器相同