@niksamokhvalov
Веб-разработчик

Как добавить дополнительный источник данных в модели Yii2?

Пример: имеется две модели — Text и Tags, отнаследованные от ActiveRecord. Есть REST-приложение, которое отдаёт данные из модели Text, у которой такие поля: id, name, desc. Я хочу добавить «динамическое» поле tags, в котором будут записи из модели Tags, что бы REST-приложение при работе с моделью Text отдавало такой ответ:
{
     id: 1,
     name: 'First',
     desc: 'Trololo-lol-lollo',
     tags: [ // А вот это уже данные из модели Tags
          id: 1,
          title: 'Hello!'
     ]
},
{
     id: 2,
     …
}


Вопрос: можно ли как-то описать в Text логику получения данных из Tags, да так, что бы запрос данных из Tags производился не на каждой итерации, а один раз? Расскажите, как красиво и выгодно сделать такое?
  • Вопрос задан
  • 190 просмотров
Решения вопроса 1
MegaMufa
@MegaMufa
Да, можно.
class Test extends ActiveRecord
{
    ...
    public function getTags() 
    {
        return $this->hasMany(Tag::class, ['text_id' => 'id']);
    }
}


В контроллере
public function actionIndex()
{
    return Text::find()
        ->andWhere(/* ... */)
        ->with('tags')
        ->all();
}


Код писал прям тут, возможно опечатался где-нибудь. Но посыл понятен. Вытягивайте данные жадной выборкой (указывая связанную модель через with()) и будет работать так, как вам надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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