I have two tables, the report_details and the name . In the report_details table, I have for and from which is an id that is related to the table name . What is the proper syntax in Yii2 to get both the for and from the column on the name table? This is my query so far.
1 Answer 1
you could use ->leftJoin( )
Not the answer you’re looking for? Browse other questions tagged yii2 yii2-advanced-app or ask your own question.
Related
Hot Network Questions
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.1.17.35809
Вот есть такой рабочий запрос на sql:
Как мне его реализовать на yii2? Мне нужен dataProvider.
Пробовала так, но так не работает
Вот структура БД
Полную документацию по работе с ActiveRecord в Yii2 всегда можно найти по ссылке:
https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/db-active-record.md
Здесь просто примеры по составлению запросов.
Шорткаты для методов, которые сразу возвращают данные:
Note: Ни метод [[yiidbActiveRecord::findOne()]], ни [[yiidbActiveQuery::one()]] не добавляет условие LIMIT 1 к генерируемым SQL-запросам. Если ваш запрос может вернуть много строк данных, вы должны вызвать метод limit(1) явно в целях улучшения производительности, например: Customer::find()->limit(1)->one().
Пример на голом SQL
Можно получить данные в виде массива:
Пример пакетной выборки для снижения потребления ресурсов:
Обновление счетчика. Метод save() здесь не особо пригоден из-за параллельных запросов.
ActiveRecord не получает автоматически данные по умолчанию из таблиц. Но их можно загрузить:
Обновление нескольких строк в таблице:
Удаление сразу многих записей. Осторожно: немного напортачишь с условиями и удалятся все данные.
Работа с транзакциями:
Так можно указать в ActiveRecord, какие именно операции требуют транзакционного выполнения:
Доступ к связанным данным:
Можно получить и объект запроса:
Вот как можно построить запрос с условиями:
Связи также могут быть и динамическими:
Теперь можно делать такие вещи:
Объявление связи многие ко многим.
С указанием названия связующей таблицы:
С указанием связи этой таблицы:
Отложенная и жадная загрузка.
Тут запрос на извлечение товаров будет выполнен 100 раз.
Тут сначала извлекутся клиенты, а следующим запросом список заказов. Итого 2 запроса.
Разные способы выполнение жадной загрузки:
При жадной загрузке можно настроить запрос при помощи анонимной функции:
Если используется select то для жадной загрузки нужно перечислять поля участвующие в связи:
Использование JOIN со связями
Иногда нужно ссылаться ссылаться на столбцы связанных таблиц.
Так можно получить клиентов, имеющих активные заказы:
Но если у нас есть связь orders, то нет необходимости указывать ее вручную, а можно сделать так:
В обоих случаях получается один и тот же sql запрос.
Во втором параметре joinWith можно передать тип join. По умолчанию используется LEFT.
Если не нужно жадно загружать данные, вторым параметром в joinWith нужно передать false.
joinWith можно смешивать с with. Например:
Для join запроса, можно указать условие, которое будет добавлено в on:
Вышеприведённый запрос вернёт всех покупателей и для каждого покупателя вернёт все активные заказы. Заметьте, что это поведение отличается от нашего предыдущего примера, в котором возвращались только покупатели, у которых был как минимум один активный заказ.
При использовании JOIN нужно явно решать конфликты имен. Например:
Более простой способ задать псевдоним
Этот синтаксис работает для простых связей. Если же необходимо использовать связующую таблицу, например $query->joinWith([‘orders.product’]), то вызовы joinWith вкладываются друг в друга:
Есть способ задать обратную связь:
Иначе при определенных условиях будут генерироваться дополнительные запросы.
Сохранение связанных данных.
Преимущество более очевидно, когда используется связующая таблица. Этот метод автоматически создаст запись в связующей таблице.
У ->link есть противоположная операция unlink:
По умолчанию метод [[yiidbActiveRecord::unlink()|unlink()]] задаст вторичному ключу (или ключам), который определяет существующую связь, значение null. Однако вы можете запросить удаление строки таблицы, которая содержит значение вторичного ключа, передав значение true в параметре $delete для этого метода.
Класс Query можно переопределять, для более тонкой настройки.
Например в своем классе запросов, можно объявить вспомогательные методы: