Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Много запросов в гриде #7

Closed
loveorigami opened this issue Jun 5, 2018 · 8 comments
Closed

Много запросов в гриде #7

loveorigami opened this issue Jun 5, 2018 · 8 comments

Comments

@loveorigami
Copy link

После того, как привязал Eav к модели, независимо от того, вывожу я Eav-аттрибуты в гриде или нет, все равно идут однотипные запросы.

Сейчас у в гриде 4 записи => получаю 5 одинаковых запросов

2018-06-05_12-34-44

@ZAYEC77
Copy link
Contributor

ZAYEC77 commented Jun 5, 2018

проблема в коде привязки поведения (метод behaviors() вашей модели)
попробуйте добавить кэш или мемоизацию

@loveorigami
Copy link
Author

loveorigami commented Jun 5, 2018

Код, как в доке

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
Copy link
Contributor

ZAYEC77 commented Jun 5, 2018

В документации код для примера, нужно понимать, что метод behaviors вызывается для каждого екземпляра модели.

Сделайте вместо:

Set::findOne(['code' => 'product']),
\nullref\useful\helpers\Memoize::call([Set::class, 'findOne'],[['code' => 'product']]),

@loveorigami
Copy link
Author

loveorigami commented Jun 5, 2018

А так пропадают eav аттрибуты в гриде.
Я так понимаю, этот запрос дергает для каждого owner-a (строки в гриде) список eav-аттрибутов.
Затем по ним получает ValueModel и далее возвращает join-ы для связи с основной моделью.

@ZAYEC77
Copy link
Contributor

ZAYEC77 commented Jun 5, 2018

в каком метода вы это сделали?

@loveorigami
Copy link
Author

loveorigami commented Jun 5, 2018

В поведении

            'entity' => function () {
                return new Entity([
                    'sets' => Memoize::call([Set::class, 'findAll'], ['slug' => ['demo']]), // не работает
                    //'sets' => Set::findAll(['slug' => ['demo']]), // работает
                ]);
            },

@ZAYEC77
Copy link
Contributor

ZAYEC77 commented Jun 5, 2018

думаю, проблема в скобках, нужно:

'sets' => Memoize::call([Set::class, 'findAll'], [['slug' => ['demo']]])

@loveorigami
Copy link
Author

Точно! Спасибо!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants