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.

¿Fue útil?

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';
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top