Коллекция Magento 2 загружается до установки предела страницы - PullRequest
0 голосов
/ 14 января 2019

Я получаю ошибку исчерпания памяти при выполнении массового действия на модели с большим количеством записей. Я пытаюсь оптимизировать это, устанавливая ограничение для коллекции, однако кажется, что полная коллекция загружается еще до того, как предел установлен. Вот код, который вызывает исчерпание памяти:

$collection = $this->filter->getCollection($this->collectionFactory->create())->setPageSize(1)->setCurPage(1);

Это метод выполнения контроллера массового действия.

edit: Так что я предполагаю, что Magento\Ui\Component\MassAction::getFilterIds() виноват, поскольку генерирует все выбранные идентификаторы внутри массива, чтобы позже выполнить SQL в выражении для фильтрации, какие строки модели необходимо использовать. Не уверен, смогу ли я это исправить.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Таким образом, проблема возникла внутри Magento \ Ui \ Component \ MassAction :: getCollection (), которая вызывается внутри метода filter-> getCollection (). Метод Id retrievieng имеет две опции: либо полагаться на провайдера данных для получения выбранных идентификаторов, который является оптимизированной опцией, либо пройти через каждый элемент и добавить его идентификатор в массив. Проблема заключалась в том, что мы не использовали первый вариант, для которого поставщику данных компонента UI нашего модуля требовалось расширить Magento \ Ui \ DataProvider \ AbstractDataProvider.

0 голосов
/ 14 января 2019
$collection = $this->filter->getCollection($this->collectionFactory->create()->setPageSize(1)->setCurPage(1));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...