如何让Doctrine 2将DateTime作为字符串返回?

时间:2018-04-20 18:12:18

标签: mysql datetime doctrine-orm

我对Doctrine 2.5和DateTime字段有疑问。

我的数据库中有几个DateTime字段,在Doctrine 1.2中没有遇到任何问题

现在我将我的应用程序升级到Doctrine 2.5,并且我遇到了QueryBuilder和DateTime字段的问题。

这是我的疑问:

$data = $em->createQueryBuilder()
    ->select('u.id, u.user_id, u.datecreate')
    ->from(self::CART_TABLE, 'u')
    ->setMaxResults(1)
    ->getQuery()->getOneOrNullResult(HYDRATE_ARRAY);

结果如下:

Array
(
    [id] => 1
    [user_id] => 16
    [datecreate] => DateTime Object
        (
            [date] => 2015-03-06 20:02:26.000000
            [timezone_type] => 3
            [timezone] => America/Sao_Paulo
        )

)

Doctrine 1.2返回:

Array
(
    [id] => 1
    [user_id] => 16
    [datecreate] => 2015-03-13 18:22:35
)

实体中的变量声明为:

/**
 * @var \DateTime
 *
 * @ORM\Column(name="datecreate", type="datetime", nullable=true)
 */
private $datecreate;

如果我更改了' type =" datetime"' to' type =" string"'它确实有用。

我实际上需要返回一个字符串而不是DateTime对象。我怎样才能做到这一点?是改变实体的唯一途径吗?

2 个答案:

答案 0 :(得分:0)

你可以改变方法,比如

public function getDatecreate()
{
   return $this->datecreate->format('Y-m-d H:i:s');
}

答案 1 :(得分:0)

我最终将所有的getter和setter更改为" string"而不是" \ DateTime"这解决了我的问题。