2013-06-06 6 views
10

Ausgehend von einer Sammlung, muss ich ein Array von Werten eines bestimmten Felds erhalten .. Lassen Sie mich dieses Feld my_id anrufen.Magento Collection, wie Array von Werten eines bestimmten Felds erhalten

Um dies zu tun, verwende ich die Varien_Data_Collection::setDataToAll() auf meine Collection..in auf diese Weise:

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

..was ich ist so etwas erhalten:

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 mein Sammlung enthält eine große Anzahl von Artikeln .. setDataToAll() wird zu zeitaufwendig und schließlich stürzt alle 2 GB (!!!) des Speichers ... Dies liegt daran, dass die Iteration zwischen allen Elementen.

Gibt es eine andere Möglichkeit, ein Array von Feldwerten ohne diese Problemumgehung zu erhalten?

Antwort

0

Ich war nicht in Ihrer besonderen Situation, aber ich hatte ähnliche Probleme, wenn ich eine Aktion für alle Bestellungen auf meiner Website durchführen wollte - die Objekte sind groß, und wenn ich nur eine Sammlung aller Bestellungen gemacht würde es schnell den verfügbaren Speicher füllen und sterben.

In meinem Fall arbeitete ich mit Bestellungen, also begann ich, durchzublättern und nur einen Monat Wert zu wählen - ein wenig zusätzlichen Code, aber es machte die Sammlungsgröße viel überschaubarer. Könntest du etwas ähnliches hier machen?

Zum Beispiel, wenn sie Produkte sind, vielleicht Filter auf die Produkt-ID und tun nur 1.000 auf einmal, oder für Aufträge neigt das Datum gut zu funktionieren, wenn sie etwas gleichmäßig verteilt sind, und so weiter. Nur ein Feld, das sie (vernünftig) gleichmäßig teilt.

+0

Yes..this eine Sammlung aller Aufträge für mich ist. Was Sie vorschlagen, könnte eine gute Workaround..aber leider kann ich sie nicht nach Datum filtern..Ich brauche den gesamten Satz :( – Zoba82

+0

Aber sofort? Kannst du nicht einen Monat bekommen, Schleife über und tun was auch immer, bekommen den nächsten Monat und was auch immer, etc.? Wenn nicht, würde es dir etwas ausmachen, die Frage zu aktualisieren, um sie genauer zu erklären? Es muss eine Möglichkeit geben, wie wir das in Gang bringen können. – Mike

31

In diesem Fall können Sie getColumnValues('fieldName') verwenden.

Also, versuchen Sie diese

$collection->getColumnValues('my_id')

Verwandte Themen