Вот такой запрос
$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, и чтобы при этом был выполнен только один запрос?
Почему yii делает 2 запроса, хотя можно обойтись одним?
-
- Сообщения: 26
- Зарегистрирован: 2018.03.02, 09:19
Re: Почему yii делает 2 запроса, хотя можно обойтись одним?
ответ во втором параметре 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
$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
Re: Почему yii делает 2 запроса, хотя можно обойтись одним?
https://elisdn.ru/blog/89/related-models-on-yii2 - если осилите, то узнаете не только о чем спрашиваете, а и еще много интересного