2011-11-26 29 views
0

我使用CakePHP运行此查询:CakePHP的查询阵列

$total = $this->Lapse->query("select sum(unix_timestamp(stop) - unix_timestamp(start)) from lapses where id = ".$lastId.""); 

,我得到的回报,这阵列结构:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [sum(unix_timestamp(stop) - unix_timestamp(start))] => 1 
       ) 

     ) 

) 

所以我变量保存这样的:$updateVal = $total[0][0][0];

其中ISN”最漂亮的,有没有办法可以简化这个OTT数组?

回答

3

您是否尝试过find()方法传递一个自定义的选项fields?:

$this->Lapse->find('all', array(
    'fields' => array('sum(unix_timestamp(stop) - unix_timestamp(start)) as elapsed_time'), 
    'conditions' => array('Lapse.id' => $lastId), 
)); 

返回数组比你得到一个漂亮,虽然它不是漂亮比elapsed_time是一个实际的模型属性。

另一种解决方案是设置elapsed_time作为模型内的virtual field

class Lapse extends AppModel { 
    ... 

    public $virtualFields = array(
    'elapsed_time' => 'sum(unix_timestamp(Lapse.stop) - unix_timestamp(Lapse.start)', 
); 

    ... 
} 

然后elapsed_time充当模型属性,并在每find()通话将被返回$updateVal['Lapse']['elapsed_time']