باستخدام addFieldToFilter الماجنتو لتصفية حسب الأعمدة الموجودة
-
19-08-2019 - |
سؤال
وحالة افتراضية. أريد لملء / تحميل مجموعة sales/order
مع كل أمر حيث grand_total تساوي total_paid
. أعرف أنني أستطيع أن استخدام addFieldToFilter
للتصفية حسب قيمة محددة، ولكن هل من الممكن استخدام هذه الطريقة لتصفية بالقيم قاعدة بيانات أخرى. إن لم يكن، هل هناك أي كائن وصول البيانات في نظام الماجنتو التي تسمح بذلك.
$orders = Mage::getModel('sales/order');
$orders = $orders->getCollection();
$orders->addFieldToFilter('total_paid',Array('eq'=>30)); //would find all the orders that were 30
//syntax to find all the orders whose total_paid value is equal to it's grand_total attribute
//????????
ومفهوم non-eav
SQL انا استيعاب لهو:
SELECT * FROM Orders o WHERE o.total_paid = o.grand_total
هل هذا ممكن القيام به بحتة مع استدعاءات الأسلوب الكائن، أو لا يجب أن أفعل تصفية ما بعد الحمل؟
وكيف نظم ORM
الأخرى التعامل مع هذا؟
المحلول
وكنت أنتظر إجابة واضحة لهذا، ولكن رؤية كما انها تأتي شيئا حتى أنني قد تشارك كذلك ما وجدتها خارجا. أنا تتبعت addFieldToFilter وعلى ما يبدو كل قيمة استخدام ينتهي نقلت بحيث لا يمكنك حقا "الإختراق" هذه باستخدام اسم العمود. في الحقيقة أنا لا أرى أي طريقة للقيام بذلك، على الأقل ليس ضمن هذه الفئة.
واقعيا أعتقد أنك ستحتاج إلى الذهاب مع تصفية ما بعد الحمل، على الأقل في الوقت الراهن. هذا بالطبع هو تعريف جدا من التعليمات البرمجية غير فعالة، ولكن بعد ذلك مرة أخرى إذا كانت الكفاءة الحاسوبية أولوية، وكنت لا تستخدم الماجنتو في المقام الأول ...
نصائح أخرى
وكان مجرد لمعالجة هذه في واحدة من مشاريعي، وجاءت عبر هذا السؤال في الوقت الذي تبحث عن حل أفضل. بلدي الإختراق يبدو مثل هذا:
$orders = Mage::getModel('sales/order')->getCollection();
$orders->getSelect()
->where('total_paid=grand_total');
وويزعجني أن مثل هذه الوظائف الأساسية لقواعد البيانات يتم تجاهله من قبل ORM الماجنتو ل.