Entfernen Sie bestimmte Kriterien aus dem Varien_Db_Select-Join
-
28-09-2020 - |
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
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';