Много запросов в гриде
loveorigami opened this issue · 8 comments
loveorigami commented
ZAYEC77 commented
проблема в коде привязки поведения (метод behaviors() вашей модели)
попробуйте добавить кэш или мемоизацию
loveorigami commented
Код, как в доке
public function behaviors()
{
return [
/** ... **/
'eav' => [
'class' => Entity::class,
'entity' => function () {
return new EntityModel([
'sets' => [
Set::findOne(['code' => 'product']), //product -- set from db
],
]);
},
],
];
}
У вас должно быть тоже самое. Посмотрите в дебаг панель в гриде, где есть привязка EAV модуля.
Вот про эту анонимку я имел ввиду в предыдущем issue
ZAYEC77 commented
В документации код для примера, нужно понимать, что метод behaviors вызывается для каждого екземпляра модели.
Сделайте вместо:
Set::findOne(['code' => 'product']),
\nullref\useful\helpers\Memoize::call([Set::class, 'findOne'],[['code' => 'product']]),
loveorigami commented
А так пропадают eav аттрибуты в гриде.
Я так понимаю, этот запрос дергает для каждого owner-a (строки в гриде) список eav-аттрибутов.
Затем по ним получает ValueModel и далее возвращает join-ы для связи с основной моделью.
ZAYEC77 commented
в каком метода вы это сделали?
loveorigami commented
В поведении
'entity' => function () {
return new Entity([
'sets' => Memoize::call([Set::class, 'findAll'], ['slug' => ['demo']]), // не работает
//'sets' => Set::findAll(['slug' => ['demo']]), // работает
]);
},
ZAYEC77 commented
думаю, проблема в скобках, нужно:
'sets' => Memoize::call([Set::class, 'findAll'], [['slug' => ['demo']]])
loveorigami commented
Точно! Спасибо!