@kirill-93

Как добавить к ответу генерируемое поле связанной модели при выборке?

Есть модели User, Article, Tag
User - пользователи, Article - статьи пользователей, Tag - теги статей.
В Модели Article добавил метод для получения всех тегов одной строкой через запятую.
class Article 
{
    public function tags()
    {
        return $this->belongsToMany('App\Models\Tag');
    }

    public function getCommaTagsAttribute()
    {
        $tags = [];

        foreach ($this->tags as $tag) {
            $tags[] = $tag->name;
        }

        return implode(',', $tags);
    }
}


То есть теперь у модели Article я могу обращаться к свойству commaTags и получать список тегов одной строкой.
Теперь мне нужно выбрать пользователей с их статьями со свойством commaTags.
Я для этого в модели User заполняю свойство $with.
class User
{
    protected $with = ['article.commaTags'];
}


Чтобы при выборке пользователей к ним всегда добавлялись их статьи, а к статьям теги через запятую.
Но такая запись вызывает ошибку. Полагаю потому, что commaTags не настоящее поле, а искусственно созданное.
Как реализовать задуманное?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
class Article 
{
    protected $appends = ['commaTags'];
}


P.S.
public function getCommaTagsAttribute()
{
    $this->tags->implode('name', ', ');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы