Cakephp,将查询更改为一次获取所有

Cakephp,将查询更改为一次获取所有,php,mysql,cakephp,cakephp-2.0,Php,Mysql,Cakephp,Cakephp 2.0,我在foreach中有多个查询我知道它是错误的,我想更正它我有如下虚拟字段: 'night_hours' => 'SUM(Hour.night)', 'half_hours' => 'SUM(Hour.half)', 'NN' => 'SUM(Hour.day_off_id = 13)' 控制器中的我的foreach循环: foreach ($users as $user){ $set_of_days = $this->Hour->find('al

我在foreach中有多个查询我知道它是错误的,我想更正它我有如下虚拟字段:

'night_hours' => 'SUM(Hour.night)',
'half_hours' => 'SUM(Hour.half)',
'NN' => 'SUM(Hour.day_off_id = 13)'
控制器中的我的foreach循环:

foreach ($users as $user){
        $set_of_days = $this->Hour->find('all', array(
                'fields' => array('hour_from', 'hour_to', 'day_off_id', 'night_hours', 'half_hours', 'NN'),
                'conditions' => 
                    array('subordinate_id' => $user['User']['id'],
                          'date(Hour.date) BETWEEN ? AND ?' => array($date_from, $date_to))));
它工作正常,但当我在一个视图中有4k用户时,它会杀死db,我想加入有小时数的表用户,但我得到一个错误,列night_hours不存在,你们知道有什么办法吗

以下是一个问题:

SELECT `Hour`.`hour_from`, `Hour`.`hour_to`, `Hour`.`day_off_id`, (SUM(`Hour`.`night`)) AS `Hour__night_hours`, (SUM(`Hour`.`half`)) AS `Hour__half_hours`, (SUM(`Hour`.`day_off_id` = 13)) AS `Hour__NN` FROM `kadry`.`hours` AS `Hour` WHERE `subordinate_id` = 193 AND date(`Hour`.`date`) BETWEEN '2014-01-11' AND '2014-02-11'

您没有这些列“night\u hours”、“half\u hours”,在您的查询中,您给了它不同的别名

试试这个

  'fields' => array('hour_from', 'hour_to', 'day_off_id', 'Hour__night_hours', 'Hour__half_hours', 'NN'),
在查询中有这样的别名

 SELECT `Hour`.`hour_from`,
          `Hour`.`hour_to`, 
          `Hour`.`day_off_id`,
          (SUM(`Hour`.`night`)) AS `Hour__night_hours`,   
                                   ^^^^^^^^^^^^^^^^^^^//---> here your alias
          (SUM(`Hour`.`half`)) AS `Hour__half_hours`,   
                                  ^^^^^^^^^^^^^^^^^^   //---> here your alias
          ......
          ......

请发布不起作用的代码。另外,您是否尝试过containable?您的意思是hasMany等?您提到您尝试了一个带有连接的唯一查询,但出现了错误。发那个密码