Tengo una colección en un método donde quiero realizar dos operaciones diferentes en esta colección. Por lo tanto, quiero dos copias separadas de la misma colección, y luego asignar una de las dos colecciones a la colección original nuevamente y devolverla.
Para simplificar esto, supongamos que tengo una colección de objetos llamada $collection
.
Ahora, lo estoy intentando con la clonación de PHP, ya que no sé si hay alguna clonación de colección de Magento incorporada o no.
$coll1 = clone $collection;
$coll2 = clone $collection;
Ahora estoy tratando de realizar diferentes operaciones en estos dos clones separados de la colección original, algo así.
$coll1->getSelect()->where('some where condition');
$coll2->getSelect()->where('some different where condition');
if($coll1->count() == 0) {
$collection = $coll2;
} else {
$collection = $coll1;
}
Pero lo extraño es que ambas colecciones clonadas tienen las condiciones asignadas. La condición $ coll1 se aplica a $ coll2 junto con la condición de $ coll2 y viceversa.
¿Alguien sabe como lograr esto?
¡Gracias!
fuente
$collection->getSelect()
y no en la colección misma.Para ampliar la respuesta de @ davidalger, puede restablecer la selección si desea realizar una operación diferente a un conteo, de esta manera:
Sin embargo, tenga cuidado, esto podría tener efectos perjudiciales más adelante en el proceso ya que esto modifica la colección.
Una mejor manera sería clonar la selección de alguna manera, pero una copia superficial no la cortaría ya que el objeto contiene tipos complejos (Varien_Db_Select ni Zend_Db_Select tienen un
__clone
método).Una forma de evitar esto es guardar los datos seleccionados, modificarlos, ejecutar su consulta y luego volver a colocar los datos seleccionados originales.
Vea aquí un ejemplo: https://ka.lpe.sh/2013/05/23/magento-clone-collection-how-to-clone-collection-in-magento/
fuente