Rimuovi criteri specifici dal join Varien_Db_Select
-
28-09-2020 - |
Domanda
Io ho Varien_Db_Select
oggetto con alcuni join e devo modificare la condizione in uno di essi.Come posso fare questo?
aggiornamento:Ho trovato quella condizione nella parte "from" e poi nella parte "joinCondition".Posso scorrere, ma non posso reinserirli
Soluzione
Quindi questo è ciò che ho trovato:
$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);
. Altri suggerimenti
Ecco il metodo che vorrei usare.
È possibile ottenere le condizioni ("dove" parte) come questa:
$where = $collection->getSelect()->getPart('where');
.
Allora puoi loop attraverso le condizioni come questa:
foreach ($where as $key => $condition)
{
// Do what you need
}
.
Infine una volta che hai apportato le modifiche necessarie, non dimenticare di applicare la condizione aggiornata alla tua colllificazione:
$collection->getSelect()->setPart('where', $where);
. Se ricevi l'errore
Non è possibile definire un nome di correlazione "xxx" più di una volta
si deve unset($fromAndJoins[$key]);
item, dove si trovava la chiave nel mio caso
$key = $attribute->getAttributeCode().'_idx.attribute_id';