Реляционные запросы в Yii 2 не работают с JOIN

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
idsite
Сообщения: 21
Зарегистрирован: 2013.10.01, 01:21
Контактная информация:

Реляционные запросы в Yii 2 не работают с JOIN

Сообщение idsite » 2015.02.01, 04:51

Почему в Yii 2 , при выполнения запроса с использованием "жадной загрузки" выполняется несколько запросов - селектов связных сущностей по ключам, а в Yii 1 , реляционные данные загружались join ом.
например на YII 2:

Код: Выделить всё

City::find()->with('country')->all();
выполнит два запроса

Код: Выделить всё

select * from city;
select * from country where id in (.../*ИД из найденых горордов*/ )
Если в Yii 1 делать подобное будет один запрос, с JOIN country

dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Реляционные запросы в Yii 2 не работают с JOIN

Сообщение dmeroff » 2015.02.01, 14:10

JOIN будет выполнятся при использовании joinWith. Использование with же будет совершать несколько запросов.

idsite
Сообщения: 21
Зарегистрирован: 2013.10.01, 01:21
Контактная информация:

Re: Реляционные запросы в Yii 2 не работают с JOIN

Сообщение idsite » 2015.02.01, 16:38

если использовать joinWith , запрос будет выполняться с JOIN но в select не будут включены данные связанной модели .
в и тоге получиться так же два запроса, select с join ом но без вывода связанных данных,
и если $eagerLoading = true отдельными запросами загрузка данных связанных моделей

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Реляционные запросы в Yii 2 не работают с JOIN

Сообщение zelenin » 2015.02.02, 02:48

idsite писал(а):если использовать joinWith , запрос будет выполняться с JOIN но в select не будут включены данные связанной модели .
в и тоге получиться так же два запроса, select с join ом но без вывода связанных данных,
и если $eagerLoading = true отдельными запросами загрузка данных связанных моделей
все верно. так и работаем

Ответить