在设置页面限制之前加载Magento 2集合

问题描述 投票:1回答:2

在具有大量记录的模型上执行批量操作时,我出现内存耗尽错误。我试图通过设置集合的限制来优化它,但似乎在甚至设置限制之前加载完整集合。这是导致内存耗尽的代码:

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

它是内部质量动作的控制器执行方法。

编辑:所以我猜Magento\Ui\Component\MassAction::getFilterIds()有错,因为它在数组中生成所有选定的id,以便稍后在语句中执行sql以过滤需要使用的模型行。不确定我是否能解决它。

memory-management collections magento2
2个回答
0
投票
$collection = $this->filter->getCollection($this->collectionFactory->create()->setPageSize(1)->setCurPage(1));

在创建集合后立即移动页面的限制。


0
投票

很明显,问题出在Magento \ Ui \ Component \ MassAction :: getCollection()里面,在filter-> getCollection()方法中调用。 Id retrievevieng方法有两个选项 - 要么依靠dataprovider来获取所选的id,这是优化的选项,要么通过每个项目并将它的id添加到数组中。问题是我们没有使用第一个选项,我们的模块UI组件的dataprovider需要扩展Magento \ Ui \ DataProvider \ AbstractDataProvider。

© www.soinside.com 2019 - 2024. All rights reserved.