في CakePhP ، كيف يمكنني تعيين شروط لنموذج غير مرتبط بالنموذج الذي أقوم بتراكمه ولكنه يرتبط بذور ما هو؟

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

سؤال

أنا أرجل ($ this-> customer-> paginate ()) على نموذج "العميل".

يرتبط نموذج العميل بنموذج "الاتصال" والذي بدوره يرتبط بنموذج "ContactAddress".

لذا:

اتصال العميل hasmany

الاتصال ينتمي إلى ContactAddress

الآن أريد أن أتعامل مع العملاء في "العملاء-> index ()" باستخدام استعلام بحث دعنا نقول "contactaddress.city" مثل "٪ new ٪"

كيف أقوم بهذا العمل؟ عندما أفعل ذلك في شروط التربط ، يقول: "عمود غير معروف" ContactAddress.city "في" الفقرة "" منطقيا.

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

المحلول 2

لقد وجدت حلًا مرضيًا للغاية.

لقد بحثت من خلال الكود المعقد لوظيفة ترقيم الصفحات ، ووجدت ، منطقياً ، أن تراجعه يضع الشروط ويمررها إلى دالة العثور على النموذج (ما لم يكن النموذج لديه وظيفة "تراجع").

حاولت أولاً تجاوز وظيفة التراجع ، لكن هذا كان معقدًا للغاية. الحل الذي وجدته في النهاية هو تمرير صلات إلى خيارات الولادة تمامًا مثلما تمر بها عند القيام بـ "البحث" على نموذج:

    //Set the pagination options:   
    `$this->paginate = array(
        'limit' => 25,
        'order' => array(
        'Customer.lastname1' => 'asc'
        ),
        'joins' =>
        array(
                // OUTER JOIN because I wanted to also 
                // fetch record that do not have a 'contact'
        array(
            'table' => 'contacts',
            'alias' => 'Contact',
            'type' => 'LEFT OUTER',
            'conditions' => array(
                'Customer.id = Contact.customer_id',
                'Contact.class' => 'ContactAddress'
            )
            ),
        array(
            'table' => 'contact_addresses',
            'alias' => 'ContactAddress',
            'type' => 'LEFT OUTER',
            'conditions' => array(
                'Contact.index = ContactAddress.id',
            )
            ),
        ),
        // In your conditions you can now use any table that 
        // was joined as well as the original 'customer' table.
        'conditions' => $conditions,

    );

    $this->set('customers',$this->paginate('Customer'));

في كلتا الحالتين آمل أن يساعد هذا شخص ما!

نصائح أخرى

من الصعب على أي حالة أو كعكة أو لا. تحتاج إما إلى القيام بذلك في خطوات (تجد ContactAddresses ومرتبط Contact.customer_ids أولا ، ثم تراجع على Customer.id IN ($customer_ids)) أو تحتاج إلى القيام بذلك مع الفائزين الفرعيين. انظر دليل حول كيفية القيام بفرع بشكل صحيح (إنها ليست جميلة).

ما هو أفضل يعتمد على مهارات الترميز الخاصة بك وحجم قاعدة البيانات وتعقيد الاستعلام الناتج. اختبر كلاهما وحدد ما يناسبك.

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