Symfony2 datetime meilleure façon de stocker les horodatages?
Je ne sais pas laquelle est la meilleure façon de conserver un timestamp dans la base de données. Je veux stocker la totalité de la date avec les heures, les minutes et les secondes, mais il ne stocke la date ( par exemple 2012-07-14 ) et je veux stocker 2012-07-14 HH:MM:SS. Je suis à l'aide de l'objet dateTime. Voici le code:
Dans le contrôleur:
$user->setCreated(new \DateTime());
Dans l'entité:
/**
* @var date $created
*
* @ORM\Column(name="created", type="date")
*/
private $created;
Est-il préférable de stocker la date et le temps séparément dans la base de données ? ou le mieux est de stocker tous ensemble YYYY-MM-DD HH:MM:SS ? J'aurai alors de comparer des dates et de calculer le temps restant, ce qui est important, afin de simplifier les opérations plus tard. Alors, qu'en pensez-vous ? quelqu'un peut-il m'aider?
source d'informationauteur nasy | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
La meilleure façon de conserver un timestamp dans la base de données est évidemment l'utilisation de la colonne d'horodatage si votre base de données prend en charge ce type. Et puisque vous pouvez définir cette colonne de mise à jour automatique à la création, vous n'avez même de fournir une définition pour elle.
Il y a un Timestampable comportement de l'extension de la Doctrine de 2 qui est exactement ce que fait à partir de l'userland côté ainsi:
Avec ce comportement, tout ce que vous devez faire est de changer votre annotation à
Alors vous n'avez pas besoin d'appeler
setCreated
dans votre code. Le champ sera réglée automatiquement lorsque l'Entité est créée pour la première fois.Afin de stocker la date de création sans l'aide de la Timestampable comportement de la doctrine, vous pouvez également utiliser Callbackspar l'ajout de l'annotation
@ORM\HasLifecycleCallbacks
lorsque vous déclarez la classe. Voici ce qui pourrait fonctionner dans votre cas pour stocker AAAA-MM-JJ HH:MM:SS dans la base de données.Enfin, si vous avez un problème de fuseau horaire, vous pouvez régler le fuseau horaire dans la session en utilisant un écouteur d'événement sur connexion. Matt Drolette a fait un travail impressionnant sur son blog ici.
Vous aurez probablement toujours être le stockage de l'heure dans le fuseau horaire de votre serveur est en cours de toute façon. Ensuite, vous utilisez le fuseau horaire défini dans la session pour afficher le bon moment pour l'utilisateur. Bonne chance.
Bâtiment sur @Pratt de réponse je l'ai fait. J'ai 2 champs dans mes entités créé un pour et un pour les modifiés.
Et puis, à l'aide de l'annotation, j'appelle cela sur prePersist et preUpdate
La fonction peut être décomposée en 2 fonctions une pour en créer une pour la mise à jour, mais cela fonctionne donc je ne vois aucune raison pour que le code supplémentaire lorsque cela fonctionne correctement.
Vous pouvez utiliser @Version comme ceci:
Cela ne fonctionne que sur un type datetime.