mysql时间类型在symfony DateTime类型中返回错误

时间:2016-06-03 17:02:03

标签: php mysql symfony datetime doctrine-orm

我的实体

中有时间类型的属性
/**
 * @ORM\Column(type="time")
 */
protected $max_time;

但是在我的twig模板中,它返回一个DateTime类型的对象,其值为错误:

DateTime {#698 ▼
  +"date": "1970-01-01 00:00:00"
  +"timezone_type": 3
  +"timezone": "America/Sao_Paulo"
}

在数据库中,此数据的值为03:00:00

我该如何解决?

2 个答案:

答案 0 :(得分:1)

所以我去尝试复制这个以提供有价值的答案。但是,您提供的信息非常有限。你收到了什么错误等等......所以我要发布我所做的和它的结果。

我遗憾地发现没有问题。我最初得到的错误是它无法将DateTime转换为字符串。一旦我添加了date过滤器,它就会停止导致错误。

实体

/**
 * @var DateTime
 * 
 * @ORM\Column(name="time", type="time")
 */
private $time;

存储在表

mysql> select * from Product;
+----+----------+-----------+-------+----------------+----------+
| id | owner_id | name      | price | description    | time     |
+----+----------+-----------+-------+----------------+----------+
|  1 |        1 | Prod Name | 2.123 | WHat happened? | 11:21:00 |
+----+----------+-----------+-------+----------------+----------+
1 row in set (0.00 sec)

树枝模板

    <table id="example">
        <thead>
            <th>Name</th>
            <th>Description</ht>
            <th>Price</th>
            <th>Action</th>
        </thead>
        <tbody>
            {% for product in products %}
            <tr>
                <td>{{ product.name }}</td>
                <td>{{ product.description }}</td>
                <td>{{ product.price }}</td>
                <td>{{ product.time|date('H:i:s') }}{{ dump(product.time) }}</td>
                <td>{% if is_granted('EDIT', product) %}
                    <a href="{{ path('app_product_show', {'id': product.id}) }}" class="btn btn-sm">Edit</a>
                {% endif %}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>

渲染

Twig Rendered

答案 1 :(得分:0)

将注释@ORM\Column(type="time")添加到数据库中的实体属性(在MySQL中测试)类型&#34;时间&#34;将创建以存储诸如&00; 00:00:00&#39;之类的值。当doctrine获取实体时,它会将Time从数据库转换为PHP DateTime对象reference

所以要从这个对象中抽出时间,只需格式化它$entity->getTimeField()->format('H:i:s');

并且不要忘记它应该是实时价值,例如&#39; 21:19:00&#39;不是一段时间,例如,45:00:12&#39;