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

时间:2013-06-06 14:30:09

标签: magento

从Collection开始,我需要获取特定字段的值数组。我将此字段称为my_id

要做到这一点,我会以这种方式使用我的Collection上的Varien_Data_Collection::setDataToAll()

$collection_fields_array = $collection->setDataToAll(array('my_id'))->toArray(array('my_id'));

..我获得的是这样的:

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
        )
)

但是..如果我的Collection包含大量项目.. setDataToAll()变得太耗时并最终崩溃所有2Gb(!!!)的内存......这是因为它在所有项目之间进行迭代。

获取字段值数组的另一种方法是不使用此解决方法吗?

2 个答案:

答案 0 :(得分:34)

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

所以,试试这个

$collection->getColumnValues('my_id')

答案 1 :(得分:0)

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

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

例如,如果它们是产品,可能会在product_id上进行过滤,一次只能进行1,000次,或者对于订单,如果日期分布均匀,则日期往往效果很好,等等。只是某些领域(合理地)将它们平分。