2015-04-02 28 views
0

我想获得last_deadline和所有分期付款的分期付款计数,但很显然,此查询将向我显示1个订单和last_deadline。如何在Cakephp中的连接字段上分配mysql函数

$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' => 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']) 
    ); 
} 

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

任何帮助PLZ

+0

使用包含你要添加的模式中可容纳的行为,你有没有加入? public $ actsAs = array('Containable'); – Butterfly 2015-04-02 13:11:52

回答

0

这里是如何创建自定义查询

$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