2013-06-06 23 views
10

Koleksiyondan başlayarak, belirli bir alanın değer dizisini elde etmem gerekiyor .. bu alanı my_id ara.Magento Koleksiyonu, belirli bir alanın değer dizisi nasıl elde edilir

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

ben elde ..what böyle bir şeydir:

Bunu yapmak için, benim Collection..in bu kaba Varien_Data_Collection::setDataToAll() kullanmak

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

But..if benim Koleksiyon çok sayıda öğe içeriyor .. setDataToAll() çok fazla zaman alıyor ve sonunda tüm 2Gb (!!!) bellek çöküyor ... bunun nedeni tüm öğeler arasındaki yineleme.

Bu geçici çözüm olmadan bir dizi alan değeri elde etmenin başka bir yolu var mı?

cevap

0

Özel durumunuzda bulunmadım, ancak sitemdeki tüm siparişler için bir eylem gerçekleştirmek istediğimde benzer sorunlar yaşadım. Nesneler büyükse ve tüm siparişlerin bir koleksiyonunu yaptım mevcut belleği hızla doldurur ve ölür.

Benim durumumda, emirlerle çalışıyordum, bu yüzden bir döngüde sadece bir aylık bir değer seçmeye başladım ve sadece biraz daha fazla kod seçmeye başladım, ancak koleksiyon boyutunu çok daha yönetilebilir hale getirdi. Burada benzer bir şey yapabilir misiniz?

Örneğin, eğer bunlar ürünüyse, belki de product_id ürününü filtreleyebilir ve yalnızca bir seferde 1.000 tane ya da siparişler için tarih biraz daha eşit dağıtıldıkları takdirde tarihler iyi çalışır. Sadece bazı alanlar (makul olarak) onları eşit olarak böler.

Bu durumda
+0

Yes..this beni için tüm siparişlerin topluluğudur deneyin. Ne önerirsiniz iyi bir çözüm olabilirdi ... ama ne yazık ki tarihe göre filtreleyemiyorum .. Tüm sete ihtiyacım var :( – Zoba82

+0

Ama bir kerede? Bir ay elde edemezsiniz ve ne yaparsan yap, vs? Eğer değilse, daha ayrıntılı bir şekilde açıklamak için soruyu güncellemeyi düşünür müsün? – Mike

31

, sen getColumnValues('fieldName') kullanabilirsiniz.

Yani, bu

$collection->getColumnValues('my_id')

İlgili konular