У меня есть такой запрос
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();
Вы можете в модели 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 для связанных таблиц не сработает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В DetailView в своей дефолтной реализации всё выводится парами ключ->значение
Функция array_diff_keys() не совсем так работаетНужно чтобы результатом было полное расхождение
У меня на сайте генерируется xml-файлВыборку я сделал через цикл for кусками по 50 тыс записей за цикл (ранее была выборка сразу всех записей)