2013-06-06 3 views
10

の配列を取得する方法を、私は私がこのフィールドmy_idを呼び出し、特定のfield..letの値の配列を取得する必要があります。これを行うにはMagentoのコレクションは、コレクションから始まって、特定のフィールドの値

、私は私のCollection..inにこのようVarien_Data_Collection::setDataToAll()を使用します。私のBut..if

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

:私はこのようなものである得る..what

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

をコレクションは、これはすべての項目の間に、その繰り返しのです... setDataToAll()はあまりにも時間がかかるになり、最終的にはすべての2Gb(!!!)のメモリをクラッシュ...多数の項目が含まれています。

は、この回避策なしでフィールドの値の配列を取得する別の方法ですか?

答えて

0

私はあなたの特定の状況にされていないが、私は私が私のサイト内のすべての注文に対してアクションを実行したい場合にも、同様の問題を持っていた - オブジェクトが大きい、と私はすべての注文のコレクションをした場合、それはすぐに利用可能なメモリを埋めると死ぬでしょう。私の場合は

は、私が注文して働いていたので、私はをループして、一度に1か月分を選択し始めた - 少し余分なコードが、それは、コレクションのサイズがはるかに管理しました。ここで似たようなことをしていただけますか?

たとえば、製品の場合は、product_idをフィルタリングして一度に1,000個だけ処理するか、注文が均等に分散されているとうまくいく傾向があります。ちょうどそれらを合理的に均等に分割するいくつかのフィールド。この場合

+0

Yes..thisは私のためにすべての注文のコレクションですしてみてください。 あなたが良いworkaround..but可能性が示唆何を、残念ながら私はdate..Iによってそれらをフィルタリングすることはできませんあなたがいない以上1ヶ月、ループを取得し、何を行うには、次の月に取得することはできますか?一度セット全体:( – Zoba82

+0

が必要しかし、どんなことをしてもよろしいですか?そうでない場合は、質問をより詳細に説明して更新してもらえますか?それを実現する方法がいくつかあるはずです。 – Mike

31

、あなたはgetColumnValues('fieldName')を使用することができます。

だから、この

$collection->getColumnValues('my_id')

関連する問題