首页 > 解决方案 > Laravel 中关系对象的访问器

问题描述

这是我的类别模型:

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

标签: phplaravellaravel-5eloquent

解决方案


您可以使用withDefault()

public function media()
{
    return $this->belongsTo(Media::class)
        ->withDefault(['url' => '/products/default/thumb.jpg']);
}

当没有结果时,它返回一个Media具有给定属性的实例。


推荐阅读