Ich habe eine Sammlung in einer Methode, in der ich zwei verschiedene Vorgänge für diese Sammlung ausführen möchte. Ich möchte also zwei separate Kopien derselben Sammlung und ordne dann eine der beiden Sammlungen wieder der ursprünglichen Sammlung zu und sende sie zurück.
Nehmen wir zur Vereinfachung an, ich habe eine Objektauflistung mit dem Namen $collection
.
Jetzt versuche ich es mit PHP-Klonen, da ich nicht weiß, ob eine Magento-Sammlung eingebaut ist oder nicht.
$coll1 = clone $collection;
$coll2 = clone $collection;
Jetzt versuche ich, verschiedene Operationen an diesen beiden separaten Klonen der ursprünglichen Sammlung durchzuführen, so etwas wie.
$coll1->getSelect()->where('some where condition');
$coll2->getSelect()->where('some different where condition');
if($coll1->count() == 0) {
$collection = $coll2;
} else {
$collection = $coll1;
}
Aber das Seltsame ist, dass diese beiden geklonten Sammlungen beide Bedingungen haben! Die Bedingung $ coll1 wird zusammen mit der Bedingung $ coll2 auf $ coll2 angewendet und umgekehrt.
Weiß jemand, wie man das erreicht?
Vielen Dank!
quelle
$collection->getSelect()
und nicht in der Sammlung selbst gespeichert .Um die Antwort von @ davidalger zu erweitern, können Sie die Auswahl zurücksetzen , wenn Sie eine andere Operation als eine Zählung ausführen möchten:
Seien Sie jedoch vorsichtig, da dies zu einem späteren Zeitpunkt nachteilige Auswirkungen haben kann, da dadurch die Sammlung geändert wird.
Ein besserer Weg wäre, das Select irgendwie zu klonen, aber eine flache Kopie würde es nicht schneiden, da das Objekt komplexe Typen enthält (Varien_Db_Select oder Zend_Db_Select haben eine
__clone
Methode).Eine Möglichkeit, dies zu umgehen, besteht darin, die ausgewählten Daten zu speichern, zu ändern, Ihre Abfrage auszuführen und dann die ursprünglichen ausgewählten Daten wiederherzustellen.
Ein Beispiel finden Sie hier: https://ka.lpe.sh/2013/05/23/magento-clone-collection-how-to-clone-collection-in-magento/
quelle