سؤال

أنا أستخدم Symfony 1.4 والعقيدة.

لنفترض أن لدي فصلين: علامة تجارية ومنتج.

عندما أقوم بإنشاء منتج جديد في المسؤول المستند إلى مولد المسؤول ، أود اختيار علامة تجارية من قائمة منسدلة. يقوم مولد المشرف بذلك من أجلي ، ويقومون تلقائيًا بإنشاء ملف sfWidgetFormDoctrineChoice.

المشكلة هي أن العلامات التجارية يتم طلبها بواسطة ID. أود أن يتم طلبهم من خلال حقل "التسمية".

من أجل القيام بذلك فعلت ما يلي في بلدي ProductForm صف دراسي:

$this->widgetSchema['brand_id']->addOption('order_by','label');

لكني أحصل على الخطأ التالي:

خطأ في بناء الجملة أو انتهاك الوصول: 1064 لديك خطأ في بناء جملة SQL ؛ تحقق من الدليل الذي يتوافق مع إصدار خادم MySQL الخاص بك للحصول على بناء الجملة الأيمن لاستخدامه بالقرب من "A" في السطر 1. فشل الاستعلام: "SELECT B.ID AS B__ID ، كما b__created_at ، b.updated_at as b__updated_at من ترتيب العلامة التجارية B بواسطة La "

الأمر بالبيان غريب حقًا. لا أفهم لماذا يبدو أنه يقطع اسم الطلب حسب العبارة.

يحرر: يبدو أن خيار "order_by" يتوقع صفيفًا كمعلمة ثانية. ما هي القيم التي تتوقعها؟

هل كانت مفيدة؟

المحلول

لم أحاول حل Benlumley منذ أن أجاب مباشرة عندما وجدت الحل الخاص بي. يبدو أكثر شاقة مما انتهيت من فعله.

ألقيت نظرة على الكود المصدري لمعرفة كيف كان كل هذا يعمل. يتبين أن خيار "order_by" يحتاج إلى صفيف يحدد الحقل الذي يريد المرء أن يطلب فيه النتائج وإما "ASC" أو "desc":

$this->widgetSchema['product_id']->addOption('order_by',array('label','asc'));

أنه يعمل مثل السحر.

نصائح أخرى

يجب أن نلقي نظرة هنا:

http://trac.symfony-project.org/wiki/howtosortadmingeratoratorlistbyforeigntablename

استنادا إلى إصدار قديم من Symfony ، لذلك اشتبه في أن المكون الإضافي الذي تربطه لن يعمل. لكنني أعتقد أن الطريقة يجب أن تكون سليمة - جوهرها هو أنه يتعين عليك إضافة طريقة إلى الإجراء لاعتراض وتعديل المعالجة الافتراضية للفرز بواسطة هذا الحقل المحدد:

بالنسبة للعقيدة ، تحتاج إلى تحديد/تجاوز AddSortquery ، للدفع ، AddSortCriteria.

أوصي بإلقاء نظرة على مجلد ذاكرة التخزين المؤقت لترى كيف تبدو الفصول التي تم إنشاؤها تلقائيًا للحصول على تعليق كيفية عملها.

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