Yii2 left join example

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 не получает автоматически данные по умолчанию из таблиц. Но их можно загрузить:

Обновление нескольких строк в таблице:

Удаление сразу многих записей. Осторожно: немного напортачишь с условиями и удалятся все данные.

Читайте также:  Downloads перевести на русский язык

Работа с транзакциями:

Так можно указать в ActiveRecord, какие именно операции требуют транзакционного выполнения:

Доступ к связанным данным:

Можно получить и объект запроса:

Вот как можно построить запрос с условиями:

Связи также могут быть и динамическими:

Теперь можно делать такие вещи:

Объявление связи многие ко многим.
С указанием названия связующей таблицы:

С указанием связи этой таблицы:

Отложенная и жадная загрузка.

Тут запрос на извлечение товаров будет выполнен 100 раз.

Тут сначала извлекутся клиенты, а следующим запросом список заказов. Итого 2 запроса.

Разные способы выполнение жадной загрузки:

При жадной загрузке можно настроить запрос при помощи анонимной функции:

Если используется select то для жадной загрузки нужно перечислять поля участвующие в связи:

Использование JOIN со связями

Иногда нужно ссылаться ссылаться на столбцы связанных таблиц.
Так можно получить клиентов, имеющих активные заказы:

Но если у нас есть связь orders, то нет необходимости указывать ее вручную, а можно сделать так:

В обоих случаях получается один и тот же sql запрос.

Во втором параметре joinWith можно передать тип join. По умолчанию используется LEFT.

Если не нужно жадно загружать данные, вторым параметром в joinWith нужно передать false.

joinWith можно смешивать с with. Например:

Для join запроса, можно указать условие, которое будет добавлено в on:

Вышеприведённый запрос вернёт всех покупателей и для каждого покупателя вернёт все активные заказы. Заметьте, что это поведение отличается от нашего предыдущего примера, в котором возвращались только покупатели, у которых был как минимум один активный заказ.

При использовании JOIN нужно явно решать конфликты имен. Например:

Более простой способ задать псевдоним

Этот синтаксис работает для простых связей. Если же необходимо использовать связующую таблицу, например $query->joinWith([‘orders.product’]), то вызовы joinWith вкладываются друг в друга:

Читайте также:  Myefe ru транскрипция и произношение перевод

Есть способ задать обратную связь:

Иначе при определенных условиях будут генерироваться дополнительные запросы.

Сохранение связанных данных.

Преимущество более очевидно, когда используется связующая таблица. Этот метод автоматически создаст запись в связующей таблице.

У ->link есть противоположная операция unlink:

По умолчанию метод [[yiidbActiveRecord::unlink()|unlink()]] задаст вторичному ключу (или ключам), который определяет существующую связь, значение null. Однако вы можете запросить удаление строки таблицы, которая содержит значение вторичного ключа, передав значение true в параметре $delete для этого метода.

Класс Query можно переопределять, для более тонкой настройки.

Например в своем классе запросов, можно объявить вспомогательные методы:

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *