在具有大量记录的模型上执行大规模操作时,出现内存耗尽错误。我正在尝试通过对集合设置限制来优化此设置,但是似乎在设置限制之前就已加载完整集合。这是导致内存耗尽的代码:
$collection = $this->filter->getCollection($this->collectionFactory->create())->setPageSize(1)->setCurPage(1);
它是内部动作的控制器执行方法。
edit:所以我想Magento\Ui\Component\MassAction::getFilterIds()
出错了,因为它会在数组内生成所有选定的ID,以便稍后执行sql in语句来过滤需要使用哪些模型行。不知道我是否能解决它。
答案 0 :(得分:0)
$collection = $this->filter->getCollection($this->collectionFactory->create()->setPageSize(1)->setCurPage(1));
在创建收藏集后立即移动页面的限制。
答案 1 :(得分:0)
因此,问题显然出在Magento \ Ui \ Component \ MassAction :: getCollection()内部,该问题在filter-> getCollection()方法内部被调用。 Id检索方法有两个选项-依靠dataprovider获取选定的ID(这是优化的选项),或者遍历每一项并将其ID添加到数组中。问题是我们没有使用第一个选项,而我们的模块UI组件的数据提供者需要使用它来扩展Magento \ Ui \ DataProvider \ AbstractDataProvider。