Стремительная загрузка внутри добавляющегося свойства в модели - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу добавить category_id в seat коллекцию, но мне нужно заполнить ее, используя готовую загрузку или отношение.

где я делаю не так?

Модель сиденья:

class Seat extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    public $appends = ['category_id'];

    protected $fillable = [
        'seat_name',
        'seat_url',
        'logo_src',
    ];

    public function getCategoryIdAttribute()
    {
        return $this->hasMany(AdSeatCategories::class);
    }

}

, когда я запускаю Seat::all();, я получаю {} для category_id в ответ.пример ответа:

{
"id": 95,
"seat_name": "gtest",
"seat_url": "http://ooop.com",
"logo_src": null,
"category_id": {},
},

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы должны отделить отношение от атрибута, стремящегося к загрузке.

class Seat extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    public $appends = ['category_id'];

    protected $fillable = [
        'seat_name',
        'seat_url',
        'logo_src',
    ];

    public function getCategoryIdAttribute()
    {
        return $this->categories()->pluck('id');
    }

    public funvtion categories()
    {
        return $this->hasMany(AdSeatCategories::class);
    }

}

лучшее решение с использованием отношения categories было бы в вызове модели Seat.

class Seat extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */

    protected $fillable = [
        'seat_name',
        'seat_url',
        'logo_src',
    ];

    public funvtion categories()
    {
        return $this->hasMany(AdSeatCategories::class);
    }

}

в контроллере сделать:

$seats = Seat::with('categories:id')->get();
0 голосов
/ 24 сентября 2018

Похоже, что ваш getCategoryIdAttribute() возвращает отношение, когда вы вместо этого хотите, чтобы он возвратил коллекцию, поэтому обязательно вызовите get() следующим образом:

public function getCategoryIdAttribute()
{
    return $this->hasMany(AdSeatCategories::class)->get();
}

В качестве альтернативы, возможно, вместо этого вы хотитеотношение и атрибут:

public function categories()
{
    return $this->hasMany(AdSeatCategories::class);
}

public function getCategoryIdsAttribute()
{
    return $this->categories()->get()->pluck('id');
}
...