我正在尝试将更新的日期时间列转换为数字。所以我在我的包含行为中做到了这一点。
$this->paginate = array(
'limit'=>1,
'fields'=>array(
'id',
),
'contain'=>array(
'Image'=>array('fields'=>array(
'id',
'UNIX_TIMESTAMP(Image.updated) AS `rev`',
))
)
);
我从Paginator获取此数据
Array
(
[0] => Array
(
[Receipt] => Array
(
[id] => 19938
)
[Image] => Array
(
[0] => Array
(
[id] => 18143
[receipt_id] => 19938
[Image] => Array
(
[0] => Array
(
[rev] => 1357872726
)
)
)
[1] => Array
(
[id] => 18144
[receipt_id] => 19938
[Image] => Array
(
[0] => Array
(
[rev] => 1357872728
)
)
)
)
)
)
出于某种原因Image
为每条记录嵌套两次。如果我删除了UNIT_TIMESTAMP,它会正确获取数据。
$this->paginate = array(
'limit'=>1,
'fields'=>array(
'id',
),
'contain'=>array(
'Image'=>array('fields'=>array(
'id',
'updated',
))
)
);
输出
Array
(
[0] => Array
(
[Receipt] => Array
(
[id] => 19938
)
[Image] => Array
(
[0] => Array
(
[id] => 18143
[updated] => 2013-01-10 21:52:06
[receipt_id] => 19938
)
[1] => Array
(
[id] => 18144
[updated] => 2013-01-10 21:52:08
[receipt_id] => 19938
)
)
)
)
当我将一个表达式添加到字段时,知道为什么Cake会这样做吗?
答案 0 :(得分:1)
您可以尝试使用virtual fields:
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->virtualFields['name'] = sprintf(
'UNIX_TIMESTAMP(%s.updated) AS %s.rev', $this->alias, $this->alias
);
}
不确定我的符号是否正确,试一试,我还没有测试过。