我正在使用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];
哪个不是最漂亮的,有没有办法可以简化这个OTT阵列?
答案 0 :(得分: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
充当模型属性,并在$updateVal['Lapse']['elapsed_time']
次调用中以find()
的形式返回。