بناء بيان شرطي عبر نماذج متعددة (CakePHP 1.2.5)
سؤال
لنفترض أن لدي 3 نماذج:المستخدم، المنطقة، البلد.
User belongsTo Region
Region belongsTo Country
يستخدم كل من هذه النماذج السلوك القابل للاحتواء.أحاول العثور على مستخدمين من البلد الذي يحمل الرمز "US".إليك ما أحاول:
$users = $this->User->find('all', array(
'conditions' => array('Country.code' => 'US'),
'contain' => array('Region.Country'),
));
يقوم CakePHP بتقسيم هذا إلى استعلامين:
- أولاً، يتم اختيار المعرفات لجميع الدول ذات الرمز "US".
- ثم يستخدم هذه المعرفات لتحديد جميع المستخدمين الذين ينضمون إلى المناطق التي
region.country_id
موجود في قائمة معرفات الدولة التي تم استردادها مسبقًا.
ونتيجة لذلك، انتهى بي الأمر بوجود أخطاء SQL في تطبيقي منذ أن قمت بتحميله conditions
يحتوي المصفوفة على مرجع إلى Country.code، والاستعلام الثاني الذي ينشئه Cake لا ينضم إلى البلدان.
أفضل حل للكيك أراه هو إنشاء استعلام فرعي كما هو موضح في ملف شروط البحث المعقدة جزء من الدليل.ومع ذلك، يبدو هذا معقدًا للغاية، وهو بمثابة اختراق أكثر مما أرغب في تنفيذه.هل هناك طريقة أسهل أتجاهلها؟
المحلول
كتب Nate Abele (المطور الرئيسي السابق لـ CakePHP) مقالًا حول القيام بذلك الانضمامات المخصصة والتي قد تساعد.
نصائح أخرى
ضع الشروط في الاحتواء أيضًا.على سبيل المثال:
$users = $this->User->find('all', array('contain' => array(
'Region' => array(
'Country' => array(
'conditions' => array('Country.code' => 'US'),
),
),
)));
راجع المثال الثاني إلى الأخير في دليل الاحتواء