CakePHP 3アプリでは、それが関連付けられていないテーブルからすべてを検索するクエリを構築するにはどうすればよいですか。

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

  •  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メールを選択します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top