Pergunta

Eu tenho Varien_Db_Select objeto com algumas junções e preciso alterar a condição em uma delas.Como posso fazer isso?

atualizar:Encontrei essa condição na parte "de" e depois na parte "joinCondition".Posso percorrer, mas não posso colocá-los de volta

Foi útil?

Solução

Então foi isso que eu descobri:

$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);

Outras dicas

Aqui está o método que eu usaria.

Você pode obter as condições (parte "onde") assim:

$where = $collection->getSelect()->getPart('where');

Então você pode percorrer as condições assim:

foreach ($where as $key => $condition)
{
// Do what you need
}

Finalmente, depois de fazer as alterações necessárias, não se esqueça de aplicar a condição atualizada à sua coleção:

$collection->getSelect()->setPart('where', $where);

Se você receber o erro

Você não pode definir um nome de correlação 'xxx' mais de uma vez

você tem que unset($fromAndJoins[$key]); item, onde estava a chave no meu caso

$key = $attribute->getAttributeCode().'_idx.attribute_id';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top