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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在设置页面限制之前加载Magento 2集合相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

另一答案

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

以上是关于在设置页面限制之前加载Magento 2集合的主要内容,如果未能解决你的问题,请参考以下文章

Magento 2 从搜索页面获取所有产品

如何过滤日期的Magento集合或null

Magento 2在结帐页面phtml中发送到支付网关之前获取订单ID?

如何在magento中对库存状态的产品集合进行排序

如何确保Magento 2中的RequireJS在加载其他脚本之前加载jQuery?我发现嵌套需要解决这个问题

Magento 获取未加载所有属性的相关产品