Очень много одиночных запросов на index странице

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
i-programmer
Сообщения: 101
Зарегистрирован: 2015.08.24, 18:50

Очень много одиночных запросов на index странице

Сообщение i-programmer »

У меня есть стандартная index страница с таблицей. Там может быть выведено много данных из связанных таблиц, например:

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

[
	'attribute' => 'responsible_id',
	'value' => function($model) {
		return $model->responsible->name ?? '';
	},
	'filter' => $data['headTypes']
],
[
	'attribute' => 'owner_id',
	'value' => function($model) {
		return $model->owner->name ?? '';
	},
	'filter' => $data['headTypes']
],
При таком варианте в профайлере вижу очень много запросов по типу:

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

SELECT * FROM "directory"."head_type" o WHERE "id"=1
SELECT * FROM "directory"."head_type" r WHERE "id"=1
SELECT * FROM "directory"."head_type" m WHERE "id"=2
SELECT * FROM "directory"."head_type" n WHERE "id"=3
SELECT * FROM "directory"."head_type" i WHERE "id"=1
SELECT * FROM "directory"."head_type" d WHERE "id"=2
Это норма? Или как-то можно сделать правильное что-то, что я не знаю?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Очень много одиночных запросов на index странице

Сообщение ElisDN »

Сделать жадную загрузку
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Очень много одиночных запросов на index странице

Сообщение ElisDN »

Ну и код можно упростить до:

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

'attribute' => 'responsible_id',
'value' => 'responsible.name',
i-programmer
Сообщения: 101
Зарегистрирован: 2015.08.24, 18:50

Re: Очень много одиночных запросов на index странице

Сообщение i-programmer »

ElisDN писал(а): 2020.08.13, 14:27 Сделать жадную загрузку
у меня в поисковой модели написано `joinWith` типа

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

->joinWith('owner o')
,

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

->joinWith('organization org')
это не оно? Подскажите как правильно. Что есть жадная загрузка?
ElisDN писал(а): Ну и код можно упростить до:

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

'attribute' => 'responsible_id',
'value' => 'responsible.name',
ДА, я знаю. но иногда есть значения, где конкретно так не получится.
А чем отличается мой вариант от представленного вами? Они на столько разные? А чем и почему?
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Очень много одиночных запросов на index странице

Сообщение unknownby »

Можно написать

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

->joinWith('owner o', false, 'LEFT JOIN')
А вот тут почитать Жадная загрузка
Последний раз редактировалось unknownby 2020.08.13, 16:07, всего редактировалось 1 раз.
i-programmer
Сообщения: 101
Зарегистрирован: 2015.08.24, 18:50

Re: Очень много одиночных запросов на index странице

Сообщение i-programmer »

ElisDN писал(а): 2020.08.13, 14:29 Ну и код можно упростить до:

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

'attribute' => 'responsible_id',
'value' => 'responsible.name',
Упрощение ничего не дало.. значит что-то в моделях и связях и загрузках... Подскажите пожалуйста, как осуществить ленивую загрузку? Я думал joinWith в этом помогает
i-programmer
Сообщения: 101
Зарегистрирован: 2015.08.24, 18:50

Re: Очень много одиночных запросов на index странице

Сообщение i-programmer »

unknownby писал(а): 2020.08.13, 16:06 Можно написать

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

->joinWith('owner o', false, 'LEFT JOIN')
А вот тут почитать Жадная загрузка
ммм.. точно. что-то я не заметил. Но выигрыша это не дало...что-то осталось как было :?


UPD: хотя вроде дало... поэкспериментирую ещё. спасибо
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Очень много одиночных запросов на index странице

Сообщение unknownby »

А можно увидеть контроллер, вьюху и модель поиска? Чтоб понимать, как идёт поиск и через что идет отображение данных
Ответить