Почему yii делает 2 запроса, хотя можно обойтись одним?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
imyapolzovatelya
Сообщения: 26
Зарегистрирован: 2018.03.02, 09:19

Почему yii делает 2 запроса, хотя можно обойтись одним?

Сообщение imyapolzovatelya » 2018.10.20, 16:35

Вот такой запрос
$query = User::find()->innerJoinWith('profile')->orderBy('scores')->all();
Делает два запроса
1) SELECT `user`.* FROM `user` INNER JOIN `profile` ON `user`.`id` = `profile`.`user_id` ORDER BY `scores`
2) SELECT * FROM `profile` WHERE `user_id` IN (39740, 39734, ...)

Вопрос:
Можно ли сделать, чтобы происходил только один запрос? Второй запрос тут явно лишний, первый запрос ведь уже нашел нужные профили. И почему у него такой select `user`.*, а не '*', или user.*, profile.* ?

Мне это не нравится. Можно ли как то сделать, чтобы я мог обращаться к моделям User и Profile вот так: $user->nick, и $user->profile->name, и чтобы при этом был выполнен только один запрос?

yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Почему yii делает 2 запроса, хотя можно обойтись одним?

Сообщение yan » 2018.10.20, 18:14

ответ во втором параметре innerJoinWith
$eagerLoading whether to eager load the relations.
* Note, that this does not mean, that the relations are populated from the
* query result. An extra query will still be performed to bring in the
* related data.

т.е. если его выставить в false, то второго запроса не будет, как впрочем и связанных данных
сделано так скорее всего для однотипности получения данных в JoinWith и with

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Почему yii делает 2 запроса, хотя можно обойтись одним?

Сообщение andku83 » 2018.10.22, 16:38

https://elisdn.ru/blog/89/related-models-on-yii2 - если осилите, то узнаете не только о чем спрашиваете, а и еще много интересного

Ответить