Magento Collection,如何获取特定字段的值数组

Zob*_*a82 11 magento

从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(!!!)的内存...这是因为它在所有项目之间的迭代.

另一种获取字段值数组的方法没有这种解决方法吗?

Igo*_*nko 35

在这种情况下,您可以使用getColumnValues('fieldName').

所以,试试吧

$collection->getColumnValues('my_id')


Mik*_*ike 0

我没有遇到过您的特殊情况,但是当我想对网站中的所有订单执行操作时,我遇到了类似的问题 - 对象很大,如果我只是收集所有订单,它会很快填满可用内存并死亡。

就我而言,我正在处理订单,因此我开始循环并一次只选择一个月的价值 - 一些额外的代码,但它使集合大小更易于管理。你能在这里做类似的事情吗?

例如,如果它们是产品,则可以根据 Product_id 进行过滤并一次只处理 1,000 个,或者对于订单,如果分布比较均匀,则日期往往效果很好,等等。只是一些(合理地)将它们均匀划分的字段。