ابحث عن الطريقة باستخدام JOIN في CakePHP
يستكشف هذا السؤال كيفية تنفيذ استعلام يربط بين جدولين ورسائل ومستخدمين، باستخدام بحث CakePHP طريقة. على وجه التحديد، نحن بحاجة إلى استرداد المعلومات من كلا الجدولين بناءً على شرط حيث يكون حقل messages.from مساويًا لحقل users.id، وحقل messages.to يساوي 4.
هناك نوعان أساسيان طرق تحقيق هذه الصلة في CakePHP: طريقة CakePHP القياسية واستخدام صلة مخصصة.
طريقة CakePHP القياسية
الطريقة الموصى بها هي استخدام طريقة CakePHP القياسية، والتي يتضمن إنشاء علاقات بين النماذج واستخدام السلوك القابل للاحتواء. وإليك الطريقة:
تحديد العلاقات في نماذج المستخدم والرسائل:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
نفذ استعلام البحث التالي:
$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" ));
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3