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

Était-ce utile?

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';
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top