Вопрос

У меня есть объект 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';
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top