قم بإزالة معايير محددة من صلة Varien_Db_Select
-
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';
لا تنتمي إلى magento.stackexchange