Удалить определенные критерии из varien_db_select join
-
28-09-2020 - |
Вопрос
У меня есть объект Varien_Db_Select
с некоторыми соединениями, и мне нужно изменить состояние в одном из них.Как я могу сделать это?
Обновление: я нашел это условие в разделе «от», а затем в разделе «Joincondition».Я могу пройти петлю, но я не могу положить их обратно
Решение
Так что это то, что я придумал:
$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);
. Другие советы
Вот метод, который я бы использовал.
Вы можете получить условия («где« часть), как это:
$where = $collection->getSelect()->getPart('where');
.
Тогда вы можете зацикливаться через такие условия:
foreach ($where as $key => $condition)
{
// Do what you need
}
.
Наконец, после того, как вы сделали необходимые изменения, не забудьте применить обновленное условие для вашего сочетания:
$collection->getSelect()->setPart('where', $where);
. Если вы получите ошибку
Вы не можете определить имя корреляции 'xxx' более одного раза
Вы должны unset($fromAndJoins[$key]);
элемент, где ключ был в моем случае
$key = $attribute->getAttributeCode().'_idx.attribute_id';
.