Remover critérios específicos da junção Varien_Db_Select
-
28-09-2020 - |
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
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