"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إجراء استعلام الانضمام باستخدام طريقة البحث الخاصة بـ CakePHP؟

كيفية إجراء استعلام الانضمام باستخدام طريقة البحث الخاصة بـ CakePHP؟

تم النشر بتاريخ 2024-11-02
تصفح:447

How to Perform a Join Query with CakePHP\'s find Method?

ابحث عن الطريقة باستخدام JOIN في CakePHP

يستكشف هذا السؤال كيفية تنفيذ استعلام يربط بين جدولين ورسائل ومستخدمين، باستخدام بحث CakePHP طريقة. على وجه التحديد، نحن بحاجة إلى استرداد المعلومات من كلا الجدولين بناءً على شرط حيث يكون حقل messages.from مساويًا لحقل users.id، وحقل messages.to يساوي 4.

هناك نوعان أساسيان طرق تحقيق هذه الصلة في CakePHP: طريقة CakePHP القياسية واستخدام صلة مخصصة.

طريقة CakePHP القياسية

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

  1. تحديد العلاقات في نماذج المستخدم والرسائل:

    class User extends AppModel {
     public $actsAs = array('Containable');
     public $hasMany = array('Message');
    }
    
    class Message extends AppModel {
     public $actsAs = array('Containable');
     public $belongsTo = array('User');
    }
  2. أعد تسمية العمود messages.from إلى messages.user_id لتسهيل الارتباط التلقائي بناءً على العلاقة.
  3. نفذ استعلام البحث التالي:

    $this->Message->find('all', array(
     'contain' => array('User'),
     'conditions' => array(
         'Message.to' => 4
     ),
     'order' => 'Message.datetime DESC'
    ));

انضمام مخصص]

بدلاً من ذلك، يمكنك استخدام صلة مخصصة داخل استعلام البحث:

$this ->الرسالة->العثور على('الكل',صفيف( 'الانضمام' => صفيف ( صفيف ( 'الجدول' => "المستخدمون"، 'الاسم المستعار' => ""انضمام المستخدم"،" 'النوع' => 'داخلي'، 'الشروط' => صفيف ( 'UserJoin.id = الرسالة.من' ) ) )، 'الشروط' => صفيف ( 'رسالة إلى' => 4 )، 'الحقول' => المصفوفة ('UserJoin.*'، 'Message.*')، 'الأمر' => "الرسالة. التاريخ والوقت DESC" ));
$this->Message->find('all', array(
    'joins' => array(
        array(
            'table' => 'users',
            'alias' => 'UserJoin',
            'type' => 'INNER',
            'conditions' => array(
                'UserJoin.id = Message.from'
            )
        )
    ),
    'conditions' => array(
        'Message.to' => 4
    ),
    'fields' => array('UserJoin.*', 'Message.*'),
    'order' => 'Message.datetime DESC'
));
في هذه الصلة المخصصة، نحدد بوضوح شروط الصلة ونحدد الحقول المراد إرجاعها.

استخدام علاقتين لنفس النموذج

إذا كنت ترغب في إنشاء علاقتين لنفس النموذج، فيمكنك تعريفهما على النحو التالي:

class User Extends AppModel { public $actsAs = array('Containable'); عامة $hasMany = صفيف ( 'الرسائل المرسلة' => صفيف ( 'اسم الفئة' => 'رسالة'، 'المفتاح الخارجي' => 'من' )، 'تم استلام الرسائل' => صفيف ( 'اسم الفئة' => 'رسالة'، 'المفتاح الخارجي' => 'ل' ) ); } تمتد رسالة الفئة AppModel { public $actsAs = array('Containable'); عام ينتمي إلى $ = صفيف ( 'المستخدم' => صفيف ( 'اسم الفئة' => 'مستخدم'، 'المفتاح الخارجي' => 'من' )، 'المستخدم' => صفيف ( 'اسم الفئة' => 'مستخدم'، 'المفتاح الخارجي' => 'ل' ) );
$this->Message->find('all', array(
    'joins' => array(
        array(
            'table' => 'users',
            'alias' => 'UserJoin',
            'type' => 'INNER',
            'conditions' => array(
                'UserJoin.id = Message.from'
            )
        )
    ),
    'conditions' => array(
        'Message.to' => 4
    ),
    'fields' => array('UserJoin.*', 'Message.*'),
    'order' => 'Message.datetime DESC'
));
مع تحديد هذه العلاقات، يمكنك استخدام استعلام بحث مثل هذا:

$this->Message->find('all', array( 'تحتوي' => صفيف ("من المستخدم")، 'الشروط' => صفيف ( 'رسالة إلى' => 4 )، 'الأمر' => "الرسالة. التاريخ والوقت DESC" ));
            
بيان الافراج أعيد طبع هذه المقالة على: 1729175782 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3