Supprimer des critères de Varien_Db_Select rejoindre
-
28-09-2020 - |
Question
J'ai Varien_Db_Select
objet avec certaines jointures et j'ai besoin de changer de condition dans l'un d'eux.Comment puis-je faire cela?
mise à jour:J'ai constaté que la condition de "de" et ensuite dans "joinCondition" partie.Je peux en boucle, mais je ne peux pas les mettre
La solution
C'est ce que je suis venu avec:
$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);
Autres conseils
Voici la méthode que j'allais utiliser.
Vous pouvez obtenir les conditions ("où" partie) comme ceci:
$where = $collection->getSelect()->getPart('where');
Ensuite, vous pouvez faire une boucle par le biais des conditions comme ceci:
foreach ($where as $key => $condition)
{
// Do what you need
}
Enfin, une fois que vous avez fait les changements nécessaires, n'oubliez pas d'appliquer la mise à jour de la condition de votre colllection:
$collection->getSelect()->setPart('where', $where);
Si vous obtenez le message d'erreur
Vous ne pouvez pas définir un nom de corrélation 'xxx' plus d'une fois
vous devez unset($fromAndJoins[$key]);
item, où la clé a été dans mon cas
$key = $attribute->getAttributeCode().'_idx.attribute_id';