从Collection开始,我需要获取特定字段的值数组.我称之为字段my_id.
要做到这一点,我使用Varien_Data_Collection::setDataToAll()on my Collection ..就这样:
$collection_fields_array = $collection->setDataToAll(array('my_id'))->toArray(array('my_id'));
Run Code Online (Sandbox Code Playgroud)
..我得到的是这样的:
Array
(
[0] => Array
(
[my_id] => 71e1bd18
)
[1] => Array
(
[my_id] => 70d47a69
)
[2] => Array
(
[my_id] => 687bed84
)
[3] => Array
(
[my_id] => 673df159
)
[4] => Array
(
[my_id] => 66690a4c
)
[5] => Array
(
[my_id] => 65994440
)
)
Run Code Online (Sandbox Code Playgroud)
但是..如果我的Collection包含大量项目.. setDataToAll()变得太耗时并最终崩溃所有2Gb(!!!)的内存...这是因为它在所有项目之间的迭代.
另一种获取字段值数组的方法没有这种解决方法吗?
我没有遇到过您的特殊情况,但是当我想对网站中的所有订单执行操作时,我遇到了类似的问题 - 对象很大,如果我只是收集所有订单,它会很快填满可用内存并死亡。
就我而言,我正在处理订单,因此我开始循环并一次只选择一个月的价值 - 一些额外的代码,但它使集合大小更易于管理。你能在这里做类似的事情吗?
例如,如果它们是产品,则可以根据 Product_id 进行过滤并一次只处理 1,000 个,或者对于订单,如果分布比较均匀,则日期往往效果很好,等等。只是一些(合理地)将它们均匀划分的字段。