2016-06-03 3 views
2

ich eine Eigenschaft Zeittyp habe in meinem EntityMysql Zeittyp falsch zurück in symfony Datetime-Typ

/** 
* @ORM\Column(type="time") 
*/ 
protected $max_time; 

Aber in meinem Zweig Vorlage, gibt es ein Objekt von Datetime-Typ mit einem falschen Wert:

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

der Wert dieser Daten in der Datenbank ist 03:00:00

Wie kann ich es beheben?

+0

Haben Sie Ihr Gebietsschema festgelegt? ['date_default_timezone_set'] (http://php.net/manual/en/function.date-default-timezone-set.php). Wenn Sie einstellen müssen, was gespeichert ist, siehe: 'setTimezone'. Sie müssen den Wert kennen, den Sie speichern. Dann sollte es trivial sein. – ficuscr

+0

Ja, ich habe mein Gebietsschema eingestellt. Aber ich nicht was ein Datum im Einzelnen zu speichern, ich nur was eine Zeit zu speichern. 01:00:00, 02:00:00, 03:23:00 –

+0

Ahh, du bekommst die Unix-Epoche. Pretty sure Doctrine gibt immer ein '\ DateTime' Objekt zurück ...' time: Typ, der eine SQL TIME einem PHP DateTime Objekt zuordnet'. Bis zu Ihnen, um es zu formatieren. Was ist ein Typ in Ihrer Datenbank? – ficuscr

Antwort

1

So ging ich und versuchte, dieses zu replizieren, um eine wertvolle Antwort zur Verfügung zu stellen. Sie haben jedoch nur sehr begrenzte Informationen darüber zur Verfügung gestellt, wie Sie dazu gekommen sind. Welchen Fehler bekommst du und so weiter ... also werde ich posten, was ich getan habe und es sind Ergebnisse.

Ich habe leider kein Problem gefunden. Der Fehler, den ich bekam, war, dass DateTime nicht in String konvertiert werden konnte. Nachdem ich den date Filter hinzugefügt hatte, hörte es auf, einen Fehler zu verursachen.

Entity

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

in Tabelle

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) 

Zweig Vorlage

<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> 

Rendered

Twig Rendered Stored

0

Wenn Sie die Annotation @ORM\Column(type="time") zu der Entitätseigenschaft in der Datenbank hinzufügen (getestet in MySQL), wird das Feld vom Typ "Time" erstellt, um Werte wie '00: 00: 00 'zu speichern. Wenn Lehren Ihnen Einheit holen wandelt es Zeit aus der Datenbank zu PHP Datetime-Objekt reference

Also nur Zeit von diesem Objekt zu erhalten, formatieren Sie es $entity->getTimeField()->format('H:i:s');

Und vergessen Sie nicht, dass es wie '21 Echtzeitwert sein sollte: 19:00 'nicht irgendeine Zeitlänge, ex '45: 00: 12'