Не выбираются поля со связанной таблицы Yii2

124
09 апреля 2022, 07:30

У меня есть такой запрос

return Logs::find()
            ->leftJoin('user', 'user.id = logs.user_id')
            ->orderBy('logs.id desc')
            ->offset($limit)
            ->limit(20)
            ->all();

Он возвращает все поля таблицы logs. Но мне нужно еще вернуть логин с таблицы user. Пробовал добавил так

->select(['logs.*', 'user.username'])

не сработало. Где у меня ошибка?

Полный текст запроса с select

return Logs::find()
            ->select(['logs.*', 'user.username'])
            ->leftJoin('user', 'user.id = logs.user_id')
            ->orderBy('logs.id desc')
            ->offset($limit)
            ->limit(20)
            ->all();
Answer 1

Вы можете в модели Logs создать связь с таблицей user:

public function getUser()
{
    return $this->hasOne(User::class, ['id' => 'user_id'])->select(['username']);
}

И вызвать эту связь через метод joinWith():

return Logs::find()
    ->joinWith('user')
    ->orderBy('logs.id DESC')
    ->all();

Ваш же пример сформирует правильный SQL-запрос, но, по какой-то причине, select() в Active Record для связанных таблиц не сработает.

READ ALSO
Как в DetailView сделать строки с заголовками (одна ячейка, а не две)?

Как в DetailView сделать строки с заголовками (одна ячейка, а не две)?

В DetailView в своей дефолтной реализации всё выводится парами ключ->значение

113
Полное расхождение массивов по ключу в PHP

Полное расхождение массивов по ключу в PHP

Функция array_diff_keys() не совсем так работаетНужно чтобы результатом было полное расхождение

118
парсинг сайта avito.ru

парсинг сайта avito.ru

пробую распарсить вакансии с сайтаВ исходниках нашел такую ссылку

110
Уменьшит ли это нагрузку на процессор?

Уменьшит ли это нагрузку на процессор?

У меня на сайте генерируется xml-файлВыборку я сделал через цикл for кусками по 50 тыс записей за цикл (ранее была выборка сразу всех записей)

148