CakePHP查询数组

时间:2011-11-26 15:37:41

标签: php arrays 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];

哪个不是最漂亮的,有没有办法可以简化这个OTT阵列?

1 个答案:

答案 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()的形式返回。