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

È stato utile?

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';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top