コレクションを再読み込み


9

Magento 2でコレクションリロードする機会はありますか?

例えば:


foreach($items as $singleItems){
    $collection = $this->_myCollection->addFieldToFilter('filed', $singleItems->something);
...
}

イテレーションごとに、コレクションをクリアしてもう一度ロードする必要があります

回答:


15

コレクションをクリアするには、次を呼び出すことができます。

$this->_myCollection->clear();

コレクションをリロードするには、次を呼び出します。

$this->_myCollection->load();

5
コレクションが既にロードされている場合、loadprevious clearがないと何も実行されないことに注意してください。
Fabian Schmengler、2016

1
@fschmengler完全に通常、リロードが必要なときに両方の行が次々に表示されます
デジタルピアニズムでのRaphael

2
おそらく、あなたは答えに完全な例を追加する必要があります:foreach($items as $singleItems){ $collection = $this->_myCollection ->clear() ->addFieldToFilter('filed', $singleItems->something) ->load(); }
Siarhey Uchukhlebau

7

フィルターを適用した場合は、次のコマンドでコレクションをリセットできます。

$this->_myCollection->clear()->getSelect()->reset(\Zend_Db_Select::WHERE);

次に:

$this->_myCollection->addFieldToFilter('field', $singleItems->getSomething());
$this->_myCollection->load();

1
これは魅力のように機能します。賛成(Y)ありがとう:)
Ashish Raj

0

CollectionFactoryインスタンスコレクションを使用できます。最近のデータなしで新しいオブジェクトを作成するたびにcreateメソッドによってファクトリクラス


はい。ただし、クラスが既存のオブジェクトを舞台裏で再利用している場合を除いて、特にループ内でオブジェクトを作成し続ける必要はありません。
NathanielR
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.