很抱歉,标题太具描述性,但我要问的问题是可以扩展为10个字的范围。 当我使用symfony实体createAt和updateAt类型为datetime时,当我编写api时,结果很糟糕。我不想将createAt和updateAt更改为字符串类型。 实体反抗是这样的:
/**
* @var \DateTime
*
* @ORM\Column(name="updateAt", type="datetime", options={"comment":"更新时间"})
*/
private $updateAt;
存储库中的方法:
public function getList($userId, $isMime)
{
$qb = $this->createQueryBuilder('c')
->select('c.title,c.nodeName as node_name, c.node, c.updateAt as datetime');
if($isMime == 0){
$qb->leftJoin(ApprovalInformation::class,'a','WITH','a.flowId = 11 and a.itemId = c.id');
$qb->where('a.approverId = :uid');
}else{
$qb->where('c.userId = :uid');
}
$qb->setParameter('uid', $userId);
return $qb->getQuery()->getResult();
}
控制器
$list = $cardRepo->getList($this->user->getId(), $mime);
return $this->json([
'code' => 1,
'msg' => '获取成功',
'data' => $list
]);
{
"code": 1,
"msg": "获取成功",
"data": [
{
"title": "测试报告",
"node_name": "处长批示",
"node": 11,
"datetime": {
"date": "2019-05-07 19:04:00.000000",
"timezone_type": 3,
"timezone": "Asia/Shanghai"
}
},
{
"title": "测试报告2222",
"node_name": "处长审批",
"node": 2,
"datetime": {
"date": "2019-05-07 19:28:14.000000",
"timezone_type": 3,
"timezone": "Asia/Shanghai"
}
}
]
}
my except result like is:
{
"code": 1,
"msg": "获取成功",
"data": [
{
"title": "测试报告",
"node_name": "处长批示",
"node": 11,
"datetime": "2019-05-07 19:04:00",
},
{
"title": "测试报告2222",
"node_name": "处长审批",
"node": 2,
"datetime": "2019-05-07 19:28:14",
}
]
}
我想知道一个有效的解决方案。谢谢
答案 0 :(得分:1)
您在控制器中使用$this->json()
,它将使用json_encode()
序列化您的实体。这就是导致日期时间返回的原因:
$ php -a
php > echo json_encode(new DateTime());
{"date":"2019-05-07 14:20:22.137677","timezone_type":3,"timezone":"UTC"}
有多种解决方法。您可以在调用$this->json()
之前根据数据创建一个数组:
return $this->json(
array_map(
function ($entity) {
return [
'title' => $entity->getTitle(),
...
'updateAt' => $entity->getUpdateAt()->format('Y-m-d H:i:s'),
];
},
$list
)
);
或者,您可以使用Symfony序列化器:https://symfony.com/doc/current/components/serializer.html#serializing-an-object
如果使用序列化程序,请确保还注册了DateTimeNormalizer。
答案 1 :(得分:1)
只需在实体的getUpadateAt函数中执行以下代码即可:
return $this->updateAt->format('Y-m-d h:I:s);