Eu tenho uma coleção em um método em que desejo executar duas operações diferentes nessa coleção. Portanto, quero duas cópias separadas da mesma coleção e atribua uma das duas coleções à coleção original novamente e devolva-a.
Para simplificar, suponha que eu tenha uma coleção de objetos chamada $collection
.
Agora, estou tentando com a clonagem de PHP, pois não sei se há alguma clonagem de coleção do Magento embutida ou não.
$coll1 = clone $collection;
$coll2 = clone $collection;
Agora, estou tentando executar operações diferentes nesses dois clones separados da coleção original, algo assim.
$coll1->getSelect()->where('some where condition');
$coll2->getSelect()->where('some different where condition');
if($coll1->count() == 0) {
$collection = $coll2;
} else {
$collection = $coll1;
}
Mas o mais estranho é que essas duas coleções clonadas têm as condições where atribuídas! A condição $ coll1 é aplicada a $ coll2 junto com a condição de $ coll2 e vice-versa.
Alguém sabe como alcançar isso?
Obrigado!
fonte
$collection->getSelect()
e não na coleção em si.Para expandir a resposta de @ davidalger, você pode redefinir o select se desejar fazer uma operação diferente de uma contagem - assim:
Tenha cuidado, porém, isso pode ter efeitos negativos mais tarde no processo, pois isso modifica a coleção.
Uma maneira melhor seria clonar a seleção de alguma forma, mas uma cópia superficial não a cortaria, pois o objeto contém tipos complexos (Varien_Db_Select nem Zend_Db_Select têm um
__clone
método).Uma maneira de contornar isso é salvar os dados selecionados, modificá-los, executar sua consulta e colocar de volta os dados selecionados originais.
Veja aqui um exemplo: https://ka.lpe.sh/2013/05/23/magento-clone-collection-how-to-clone-collection-in-magento/
fonte