2013-06-06 7 views
10

Począwszy od kolekcji, potrzebuję uzyskać tablicę wartości określonego pola. Proszę zadzwonić do tego pola my_id.Magento Collection, jak uzyskać tablicę wartości określonego pola

Aby to zrobić, używam Varien_Data_Collection::setDataToAll() na moim Collection..in ten sposób:

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

..what mogę uzyskać jest mniej więcej tak:

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 mój Kolekcja zawiera dużą liczbę pozycji. setDataToAll() staje się zbyt czasochłonny i ostatecznie rozbija wszystkie 2 GB (!!!) pamięci ... dzieje się tak dlatego, że jest to iteracja między wszystkimi elementami.

Czy można uzyskać tablicę wartości pól bez tego obejścia?

Odpowiedz

0

Nie znalazłem się w Twojej konkretnej sytuacji, ale miałem podobne problemy, gdy chciałem wykonać akcję na wszystkich zamówieniach w mojej witrynie - obiekty są duże, a jeśli po prostu zrobiłem kolekcję wszystkich zamówień , szybko wypełniłby dostępną pamięć i umarł.

W moim przypadku pracowałem z zamówieniami, więc zacząłem przeglądać i wybierałem tylko miesiąc z jednego miesiąca - trochę dodatkowego kodu, ale dzięki temu rozmiar kolekcji był dużo łatwiejszy w zarządzaniu. Czy mógłbyś zrobić coś podobnego tutaj?

Na przykład, jeśli są produktami, może filtrować w id_produktu i robić tylko 1000 na raz, lub w przypadku zamówień data zwykle działa dobrze, jeśli są one dystrybuowane nieco równomiernie, i tak dalej. Tylko niektóre pola, które (rozsądnie) dzielą je równomiernie.

+0

Yes..this jest zbiorem wszystkich zamówień dla mnie. Co sugerujesz może być dobrym obejściem .. ale niestety nie mogę filtrować ich według daty .. Potrzebuję całego zestawu :( – Zoba82

+0

Ale od razu? Nie możesz dostać jednego miesiąca, zapętlić się i zrobić cokolwiek, dostać następny miesiąc i zrobić cokolwiek, itp. Jeśli nie, czy mógłby Pan uaktualnić pytanie, aby wyjaśnić bardziej szczegółowo? Musi być jakiś sposób, żebyśmy to zrozumieli. – Mike

31

W tym przypadku można użyć getColumnValues('fieldName').

Więc spróbuj tego

$collection->getColumnValues('my_id')

Powiązane problemy