Eliminar criterios específicos de la unión Varien_Db_Select
-
28-09-2020 - |
Pregunta
Tengo Varien_Db_Select
Objeto con algunas uniones y necesito cambiar la condición en una de ellas.¿Cómo puedo hacer esto?
actualizar:Encontré esa condición en la parte "de" y luego en la parte "joinCondition".Puedo recorrerlos, pero no puedo devolverlos.
Solución
Entonces, esto es lo que vino:
$fromAndJoins = $select->getPart(Zend_Db_Select::FROM);
foreach($fromAndJoins as $key=>$joins){
if(strpos($joins['joinCondition'],$attribute->getAttributeCode().'_idx.attribute_id')!==false){
$newcondition = //change $joins['joinCondition'] as you want
$fromAndJoins[$key]['joinCondition']=$newcondition;
}
}
$select->reset(Zend_Db_Select::FROM);
$select->setPart(Zend_Db_Select::FROM,$fromAndJoins);
Otros consejos
Aquí está el método que usaría.
Puede obtener las condiciones ("DONDE" PARTE) así:
$where = $collection->getSelect()->getPart('where');
entonces puedes hacer un bucle a través de las condiciones como esta:
foreach ($where as $key => $condition)
{
// Do what you need
}
Finalmente una vez que haya realizado los cambios que necesita, no olvide aplicar las condiciones actualizadas a su colección:
$collection->getSelect()->setPart('where', $where);
Si recibe el error
No puede definir un nombre de correlación 'xxx' más de una vez
tienes que unset($fromAndJoins[$key]);
elemento, donde estaba la clave en mi caso
$key = $attribute->getAttributeCode().'_idx.attribute_id';