ActiveRecord joinWith лишние запросы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
sergei_beatngo
Сообщения: 4
Зарегистрирован: 2020.07.13, 15:29

ActiveRecord joinWith лишние запросы

Сообщение sergei_beatngo »

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

$query = Client::find()
	->joinWith('apartments.entrance.building.street')
	->andWhere(['{{entrance}}.[[building_id]]' => $buildingsIds])
	->all();

return;
Во вложении со скриншотом дебага выполняется первый запрос с LeftJoin'ами, после которого идут запросы по каждой связи указанной в joinWith.
Вопросы: почему связанные модели не заполняются из первого запроса с join'ами? Правильное ли поведение ActiveRecord?

update
Скриншот прикрепить не удалось.

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

SELECT "client".* FROM "client"
LEFT JOIN "apartment_group_client" ON "client"."id" = "apartment_group_client"."client_id"
LEFT JOIN "apartment_group" ON "apartment_group_client"."apartment_group_id" = "apartment_group"."id"
LEFT JOIN "apartment" ON "apartment_group"."apartment_id" = "apartment"."id"
LEFT JOIN "entrance" ON "apartment"."entrance_id" = "entrance"."id"
LEFT JOIN "building" ON "entrance"."building_id" = "building"."id"
LEFT JOIN "street" ON "building"."street_id" = "street"."id"
WHERE "entrance"."building_id"=1

SELECT * FROM "apartment_group_client" WHERE "client_id" IN (5, 16)

SELECT * FROM "apartment_group" WHERE "id" IN (18, 2)

SELECT * FROM "apartment" WHERE "id" IN (3, 15)

SELECT * FROM "entrance" WHERE "id" IN (7, 5)

SELECT * FROM "building" WHERE "id" IN (1, 2)

SELECT * FROM "street" WHERE "id"=1
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ActiveRecord joinWith лишние запросы

Сообщение samdark »

Скриншот прикрепить не удалось.
И хорошо. Кодом читается в разы лучше.

Это нормальное поведение. В теории можно было бы обойтись JOIN-ом, но:

1. Это страшно усложняло код Active Record.
2. В некоторых случаях (и, как оказалось, их не так уж и мало), это не работало концептуально.
sergei_beatngo
Сообщения: 4
Зарегистрирован: 2020.07.13, 15:29

Re: ActiveRecord joinWith лишние запросы

Сообщение sergei_beatngo »

спасибо за ответ.
Ответить