Frage

Ich habe Varien_Db_Select Objekt mit einigen Joins und ich muss die Bedingung in einem von ihnen ändern.Wie kann ich das machen?

aktualisieren:Ich habe diese Bedingung im Teil „from“ und dann im Teil „joinCondition“ gefunden.Ich kann durchschleifen, aber ich kann sie nicht zurücksetzen

War es hilfreich?

Lösung

Das ist also, was ich mir ausgedacht habe:

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

Andere Tipps

Hier ist die Methode, die ich verwenden würde.

Sie können die Bedingungen („wo“-Teil) wie folgt erhalten:

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

Dann können Sie die Bedingungen wie folgt durchlaufen:

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

Nachdem Sie schließlich die erforderlichen Änderungen vorgenommen haben, vergessen Sie nicht, die aktualisierte Bedingung auf Ihre Sammlung anzuwenden:

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

Wenn Sie den Fehler erhalten

Sie können einen Korrelationsnamen „xxx“ nicht mehr als einmal definieren

du musst unset($fromAndJoins[$key]); Artikel, wo in meinem Fall der Schlüssel war

$key = $attribute->getAttributeCode().'_idx.attribute_id';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top