WHERE
結合の両側に条件を設定して、結合からすべてのレコードを表示したいと考えています。
たとえば、私はLOAN
and BORROWER
(joined on borrower.id = loan.borrower_id
) を持っています。LOAN.field = 123 およびBORROWER.field = 'abc'
.
ここでの回答 (たとえば、 this one ) は、Containable を使用する必要があると言っているようです。
私はそれを試しました。これが私のコードです:
$stuff = $this->Borrower->find('all', array(
'conditions' => array(
'Borrower.email LIKE' => $this->request->data['email'] // 'abc'
),
'contain'=>array(
'Loan' => array(
'conditions' => array('Loan.id' => $this->request->data['loanNumber']) // 123
)
)
));
私のデータには、これらの両方の条件を持つ結合されたレコードが 1 つしかないため、単一の結果が得られると予想していました。代わりに、2 つの結果が得られます。
結果 1 は{Borrower: {field:abc, LOAN: {field: 123} }
// 正しい
結果 2 は{Borrower: {field:abc, LOAN: {NULL} }
// 不正解です
CakePHP が使用した SQL を見ると、結合が見当たりません。私が見ているのは、2 つの別々のクエリです。
クエリ 1: SELECT * from BORROWER // (yielding 2 IDs)
、
クエリ 2:SELECT * FROM LOAN WHERE borrower_id in (IDs)
これは私が望むものではありません。テーブルに参加して、条件を適用したい。SQL クエリは簡単に作成できましたが、Cake のフレームワークを採用したので、Cake の方法で実行しようとしています。
出来ますか?