سؤال

أملك 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