J'ai une collection dans une méthode où je veux effectuer deux opérations différentes sur cette collection. Donc, je veux deux copies distinctes de la même collection, puis attribuer à nouveau l'une des deux collections à la collection d'origine et la renvoyer.
Pour simplifier, supposons que j'ai une collection d'objets appelée $collection
.
Maintenant, je l'essaie avec le clonage PHP car je ne sais pas s'il existe un clonage de collection Magento intégré ou non.
$coll1 = clone $collection;
$coll2 = clone $collection;
Maintenant, j'essaie d'effectuer différentes opérations sur ces deux clones distincts de la collection d'origine, quelque chose comme.
$coll1->getSelect()->where('some where condition');
$coll2->getSelect()->where('some different where condition');
if($coll1->count() == 0) {
$collection = $coll2;
} else {
$collection = $coll1;
}
Mais le plus étrange est que ces deux collections clonées ont toutes les deux les conditions assignées! La condition $ coll1 est appliquée à $ coll2 avec la condition de $ coll2, et vice versa.
Personne ne saurais comment achever cela?
Merci!
la source
$collection->getSelect()
et non dans la collection elle-même.Pour développer la réponse de @ davidalger, vous pouvez réinitialiser la sélection si vous souhaitez effectuer une opération différente d'un compte - comme ceci:
Attention cependant, cela pourrait avoir des effets néfastes plus tard dans le processus car cela modifie la collection.
Une meilleure façon serait de cloner la sélection d'une manière ou d'une autre, mais une copie superficielle ne la couperait pas car l'objet contient des types complexes (Varien_Db_Select ni Zend_Db_Select ont une
__clone
méthode).Une façon de contourner ce problème consiste à enregistrer les données de sélection, à les modifier, à exécuter votre requête, puis à remettre les données de sélection d'origine.
Voir ici pour un exemple: https://ka.lpe.sh/2013/05/23/magento-clone-collection-how-to-clone-collection-in-magento/
la source