باستخدام addFieldToFilter الماجنتو لتصفية حسب الأعمدة الموجودة

StackOverflow https://stackoverflow.com/questions/652435

سؤال

وحالة افتراضية. أريد لملء / تحميل مجموعة 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 الماجنتو ل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top