尝试包含使用UNIX_TIMESTAMP的字段

时间:2014-01-26 21:00:54

标签: cakephp cakephp-2.3

我正在尝试将更新的日期时间列转换为数字。所以我在我的包含行为中做到了这一点。

    $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会这样做吗?

1 个答案:

答案 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
    );
}

不确定我的符号是否正确,试一试,我还没有测试过。