CakePHP 3アプリでは、それが関連付けられていないテーブルからすべてを検索するクエリを構築するにはどうすればよいですか。
-
21-12-2019 - |
質問
QueryBuilderのcontain
メソッドの逆を取得する簡単な方法はありますか?
結合テーブルとの属性の関連付けを使用して2つのモデルを関連付けています。
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のドキュメントから何が足りないと思いますが、見つけることができません。
解決
私はまだQuery Builderにそれほど多くないので、より単純なメソッドがあるかどうかわからないが、左の結合はそれをするべきです。
$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
.
どの問題が割り当てられていないすべてのEメールを選択します。
所属していません StackOverflow