MM.*_*MM. 2 cakephp join cakephp-2.0
我想查看连接中的所有记录,在连接的WHERE每一侧设置条件.
例如,我有LOAN和BORROWER(加入borrower.id = loan.borrower_id).我想要记录LOAN.field = 123和BORROWER.field = 'abc'.
这里的答案(例如这一个)似乎说我应该使用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
)
)
));
Run Code Online (Sandbox Code Playgroud)
我期望得到一个结果,因为在我的数据中,只有一个连接记录具有这两个条件.相反,我得到两个结果,
结果1是{Borrower: {field:abc, LOAN: {field: 123} }//正确的
{Borrower: {field:abc, LOAN: {NULL} }// 结果2 //错误
当我查看CakePHP使用的SQL时,我没有看到连接.我看到的是两个单独的查询:
问题1: SELECT * from BORROWER // (yielding 2 IDs),
查询2: SELECT * FROM LOAN WHERE borrower_id in (IDs)
这不是我想要的.我想加入表格,然后应用我的条件.我可以很容易地编写SQL查询,但是我尝试以Cake方式执行它,因为我们已经采用了该框架.
可能吗?
尝试做这样的事情:
$options['conditions'] = array(
'Borrower.email LIKE' => $this->request->data['email'] // 'abc',
'loan.field' => '123' )
$options['joins'] = array(
array('table' => 'loans',
'alias' => 'loan',
'type' => 'INNER',
'conditions' => array(
'borrower.id = loan.borrower_id')
)
);
$options['fields'] = array('borrower.email', 'loan.field');
$test = $this->Borrower->find('all', $options);
Run Code Online (Sandbox Code Playgroud)
你应该看到一个SQL语句,如:
SELECT borrower.email, loan.field
FROM borrowers AS borrower
INNER JOIN loans AS loan
ON borrower.id = loan.borrower_id
AND loan.field = '123'
WHERE borrower.email = 'abc'
Run Code Online (Sandbox Code Playgroud)
您的结果将在一个数组中
{Borrower: {field:abc} LOAN: {field: 123} }
Run Code Online (Sandbox Code Playgroud)
您将在本文档中找到更多信息.