CakePHP 在每个表上查找带有条件的连接记录

标签 cakephp join cakephp-2.0

我想查看连接中的所有记录,在连接的每一侧设置 WHERE 条件。

例如,我有 LOANBORROWER(加入 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 是 {Borrower: {field:abc, LOAN: {field: 123} }//正确

结果 2 是 {Borrower: {field:abc, LOAN: {NULL} }//不正确

当我查看 CakePHP 使用的 SQL 时,我没有看到连接。我看到的是两个单独的查询:

查询 1:SELECT * from BORROWER//(产生 2 个 ID),

查询 2:SELECT * FROM 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);

您应该会看到如下 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'

您的结果将在一个数组中

{Borrower: {field:abc} LOAN: {field: 123} }

您将在 document 中找到更多信息.

关于CakePHP 在每个表上查找带有条件的连接记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16285706/

相关文章:

php - CakePHP - ErrorHandler 未扩展 AppController 的问题

php - CakePHP 中的模型-> 别名和模型-> 名称有什么区别?

MySQL:如何根据其他表中的信息从多个表中提取信息?

mysql - 优化 MySQL 中的多个 JOIN

php - 在 Windows 上连接到 MySQL 时数组索引会更改大小写,但在 Linux 上则不会

php - Cakephp 2 在多个部分获取数据的问题

MySQL查询查找最后插入的代码

php - 比较两个非常相似的表中的所有个人记录,其中包含大量数据

sql - SQL查询失败磁盘空间不足

cakephp - CakePHP 2.0 中的错误处理。转义 View 变量