如何在 Cakephp 中的连接字段上分配 mysql 函数

How to assign mysql functions on join fields in Cakephp

我想获取 last_deadline 和所有分期付款的分期付款计数,但显然此查询将显示 1 个订单和 last_deadline.

$orders = $this->find('all', array(
    'fields' => array(
        'Order.order_id', 'Order.summary', 'Order.fee', 
        'BriefInstalment.id', 
        'MAX(`BriefInstalment`.`deadline`) AS last_deadline' 
    ),
    'conditions' => $conditions,
    'joins' => array(
        array(
            'table' => $this->getTableName('default', 'brief_instalments'),
            'alias' => 'BriefInstalment',
            'type' => 'RIGHT',
            'conditions' => array(
                'Order.order_id = BriefInstalment.order_id',
                'BriefInstalment.deleted' => 0,
            ), 
            'order' => 'BriefInstalment.deadline ASC',
        )
    ),

    'order' => 'BriefInstalment.deadline ASC'
));

我试过 'contain' 但没用。

'contain' => array(
    'BriefInstalment' => array(
        'fields' => 'BriefInstalment.id',
        'fields' => array(
            'BriefInstalment.id',
            'MAX(`BriefInstalment`.`deadline`) AS last_deadline', 'COUNT(`BriefInstalment`.`id`) AS total_instalments'
        ),
        'conditions' => array(
            'BriefInstalment.deleted' => 0
        )
    )
),

顺便说一下,我不想使用循环来获取 last_intalments 和 cout brief_instalments。例如

// Determine deadlines
foreach ($orders as $i => $order) {
    $deadline = $this->BriefInstalment->getLastDeadline($order['Order']['order_id']);
    $orders[$i] += array(
        ...
        'last-deadline' => $deadline,
        'total-instalments' => count($order['BriefInstalment'])
    );
}

原因是它降低了加载速度。

请帮忙

以下是创建自定义查询的方法

$conditionsSubQuery['"User2"."status"'] = 'B';

$db = $this->User->getDataSource();
$subQuery = $db->buildStatement(
    array(
        'fields'     => array('"User2"."id"'),
        'table'      => $db->fullTableName($this->User),
        'alias'      => 'User2',
        'limit'      => null,
        'offset'     => null,
        'joins'      => array(),
        'conditions' => $conditionsSubQuery,
        'order'      => null,
        'group'      => null
    ),
    $this->User
);
$subQuery = ' "User"."id" NOT IN (' . $subQuery . ') ';
$subQueryExpression = $db->expression($subQuery);

$conditions[] = $subQueryExpression;

$this->User->find('all', compact('conditions'));

参考: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#sub-queries