php - CakePHP 使用选择条件从多个表中检索数据

标签 php mysql cakephp

我正在使用 CakePHP 构建一个应用程序,但在使用一系列联接检索数据时遇到了问题。在下面的简化示例中,与别名 Delivery 的联接可能有多个记录,我想返回该表中特定字段中具有最大值的记录。

$inv_conditions = array(    'Invoice.invoice_date >=' => $DateFormatter->dateForDB($dateFrom), 
                 'Invoice.invoice_date <=' => $DateFormatter->dateForDB($dateTo),
                 'Invoice.id >' => 385380 );    

$join   =   array(array(
                'table' => 'jobs',
                'alias' => 'Jobs',
                'type'  => 'LEFT',
                'conditions'    => array('Invoice.job_id = Jobs.JOB_ID' ) 
              ),    
            array(
                'table' => 'functional',
                'alias' => 'Delivery',
                'type'  => 'LEFT'
                'conditions'=> array('AND ' => array('Invoice.job_id = Delivery.JOB',
                                                     'Delivery.TYPE_STAGE = 1') 
                            )
                     )

        );    

$invoices = $this->Invoice->find("all", array(
                "fields"    =>  array(
                            'Invoice.id',
                            'Invoice.job_id',
                            'Invoice.invoice_no',
                            'Invoice.consolidated_type',
                            'Invoice.customer_id_tbc',
                            'Invoice.invoice_date',
                            'Invoice.invoice_reference',
                            'Invoice.invoice_req',
                            'Jobs.PAYMENT_TYPE',
                            'Jobs.CUSTOMER',
                            'Jobs.MOST_RELEVANT_LINE',
                            'Delivery.DEPARTURE_DATE',
                            'Delivery.CNOR_CNEE_NAME',
                            'Delivery.TOWN_NAME',
                              ),
                "conditions"    =>  $inv_conditions,
                "joins"     => $join
                )
            );

}

我可以使用 SQL 毫无问题地执行此操作,如下所示:

SELECT 
    jobs.JOB_ID, 
    jobs.CUSTOMER, 
    functional.JOB_LINE_ORDER, 
    functional.CNOR_CNEE_NAME, 
    functional.TOWN_NAME 
FROM jobs JOIN functional ON
            jobs.JOB_ID = 'M201409180267'
        AND 
            functional.JOB =  jobs.JOB_ID
        AND 
            functional.TYPE_STAGE = 0 
        AND 
            functional.JOB_LINE_ORDER = 
               (SELECT MAX(JOB_LINE_ORDER) FROM functional 
                WHERE functional.JOB = 'M201409180267' AND functional.TYPE_STAGE = 0) 

我尝试对条件数组使用以下内容:

'conditions'    =>    array('AND ' => 
                           array( 'Invoice.job_id = Delivery.JOB',
                                  'Delivery.TYPE_STAGE = 1'
                                  'Delivery.JOB_LINE_ORDER = MAXIMUM(Delivery.JOB_LINE_ORDER)' )
                            )

这确实会返回结果,但不是正确的结果,并且 Cake 生成的结果 SQL 在 where 子句中确实有一个 select。在检索 cake 中的数据时,有没有办法做到这一点,其中创建的 sql 语句将在 where 子句中进行选择。

如有任何建议,我们将不胜感激。 谢谢 巴斯

最佳答案

您需要使用子查询来生成where子句中的select。您可以在模型中创建一个方法来执行此操作并从 Controller 调用它。

$subQuery = $db->buildStatement(
            array(
                'fields'     => array(''),
                'table'      => $db->fullTableName($this),
                'alias'      => 'aliasName',
                'limit'      => null,
                'offset'     => null,
                'joins'      => array(),
                'conditions' => $conditionsArray,
                'order'      => null,
                'group'      => null
            ),
            $this
        );
        $subQuery = ' <<YOUR MAIN QUERY CONDITION (' . $subQuery . ') >>';
        $subQueryExpression = $db->expression($subQuery);

        $conditions[] = $subQueryExpression;
        return $this->Model->find('list', compact('conditions'));

关于php - CakePHP 使用选择条件从多个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971056/

相关文章:

cakephp - cakephp 的 Netbeans v8.0.2 插件是否支持 cakephp v3?

php - CakePHP Xml 实用程序库触发 DOMDocument 警告

javascript - PHP通过javascript实现日期差异

php - 在 for 循环中按字段值返回最常见的结果?

php - 从数据库检索时序列化数组中断

mysql - Sql 结果后将两列相同的 id 相加

mysql - SQL 连接。从三个表中获取数据

CakePHP 1.2.6 登录重定向到 SSL 但需要重新登录

php - 使用 GAPI 创建包含综合浏览量和唯一访问者的报告

php - 诈骗邮件被发送到我的分类海报