symfony实体createAt和updateAt类型是datetime,当我写api时,结果很糟糕

问题描述 投票:0回答:2

我很抱歉标题如此缺乏描述性,但我问的问题太宽泛,无法容纳 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",
        }
    ]
}

我想知道一个有效的解决方案。谢谢

php symfony doctrine
2个回答
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。


0
投票

只需按照实体中 getUpadateAt 函数中的代码执行即可:

return $this->updateAt->format('Y-m-d  h:I:s);
© www.soinside.com 2019 - 2024. All rights reserved.