في تطبيق cakephp 3، كيف يمكنني إنشاء استعلام يبحث عن كل شيء من جدول لا يحتوي على الجدول المرتبط به؟

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

  •  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

والتي من شأنها تحديد جميع رسائل البريد الإلكتروني التي لم يتم تعيين أي مشاكل لها.

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