Как использовать отношения в настраиваемом атрибуте внутри модели Eloquent (Laravel)? - PullRequest
1 голос
/ 05 мая 2020

Helloo

Мне нужно сделать это в моей модели Eloquent:

protected $with = ['releases'];
public function releases() { return $this->hasMany('App\Article\Release', 'article_id'); }
public function getReleasedAttribute() { return ($this->releases()->count() > 0); }
public function getContentAttribute() { return $this->releases()->orderBy('published_at', 'desc')->first()->content; }

Но у меня вызвано много запросов !! Какое лучшее решение для нетерпеливой нагрузки? Мне будут нужны атрибуты thoses каждый раз, поэтому я предпочитаю настраивать их непосредственно в моей модели, чем в построителе запросов в моем контроллере

Я использую настраиваемый ресурс для своего Json Response, а здесь запрос на моем контроллере:

$articles = Article::with('releases')->has('releases')->get();
return ArticleReleasedResource::collection($articles);

Thx

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вы можете использовать атрибут $ appends в своей модели https://laravel.com/docs/5.6/eloquent-serialization#appending -values-to- json

protected $appends = ['released'];
0 голосов
/ 06 мая 2020

Я решил сам

Я слушаю событие «created» для pu sh логического значения «Release» в моей основной модели, и для содержимого, которое я сделал:

public function getContentAttribute() {
    return $this->releases->sortByDesc('published_at')->first()->content;
}

Я получаю коллекцию, сортирую и получаю первую Модель!

...