في تطبيق cakephp 3، كيف يمكنني إنشاء استعلام يبحث عن كل شيء من جدول لا يحتوي على الجدول المرتبط به؟
-
21-12-2019 - |
سؤال
هل هناك طريقة بسيطة للحصول على معكوس contain
طريقة منشئ الاستعلام؟
أنا أستخدم اقترانات تنتمي إلى العديد من الجداول المرتبطة لربط النموذجين.
EmailsTable $this->belongsToMany('Issues');
جدول القضايا $this->belongsToMany('Emails');
لذلك لا أستطيع أن أفعل شيئًا مثل:
$unparsed_emails = $this->Emails->find('all')->where(['issue_id is null']);
يبدو أن عكس ما يلي سيوفر رسائل بريد إلكتروني لا تحتوي على مشكلات مرتبطة بها حتى الآن:
$unparsed_emails = $this->Emails->find->contain(['Issues']); //need inverse of this
أعتقد أنني أفتقد شيئًا ما من وثائق cakephp 3 ORM/Querybuilder، لكن لا يمكنني العثور عليه.
المحلول
أنا لست مهتمًا جدًا بمنشئ الاستعلامات بعد، لذلك لست متأكدًا مما إذا كانت هناك طرق أبسط، ولكن يجب أن تقوم الصلة اليسرى بذلك.
$this->Emails
->find('all')
->leftJoin('emails_issues', 'emails_issues.email_id = Emails.id')
->where('emails_issues.id IS NULL');
يجب أن يترجم هذا إلى استعلام مثل
SELECT
Emails.id AS `Emails__id`, ...
FROM
emails AS Emails
LEFT JOIN
emails_issues emails_issues ON emails_issues.email_id = Emails.id
WHERE
emails_issues.id IS NULL
والتي من شأنها تحديد جميع رسائل البريد الإلكتروني التي لم يتم تعيين أي مشاكل لها.
لا تنتمي إلى StackOverflow