Doctrine - Ajouter l'horodatage par défaut à l'entité comme NOW ()
Suivant la Doctrine des lignes directrices j'comprendre comment définir une valeur par défaut pour une Entité, mais que si je voulais un timbre de date/heure?
Mon problème est que ma base de données par défaut est de MAINTENANT() sur un terrain, mais lorsque j'utilise la Doctrine de l'insertion d'un enregistrement les valeurs sont nulles ou vides, mais le reste de l'insert qui s'est passé.
Aussi depuis la Doctrine dit de déclarer la valeur par défaut comme const, cela crée également un problème de.
Suggestions?
source d'informationauteur Phill Pafford
Vous devez vous connecter pour publier un commentaire.
Ok j'ai trouvé la solution:
La
prePersist
option est ce que je fais.Assurez-vous que vous définissez dans les annotations
et voici l'exemple de la fonction qu'ils offrent
Et si vous êtes en utilisant un ORM comme je suis
et voici l'exemple de la fonction qu'ils offrent
Dans mon expérience, il est préférable de tout mettre dans vos Entités et de ne pas essayer de forcer votre base de données afin de contourner l'ORM.
Afin d'avoir exactement
NOW()
vous pouvez étendreDoctrine\DBAL\Types\DateTimeType
.Autre méthode:
Ensuite, vous pouvez utiliser
$entity->setFieldDatetime(DateTimeNow())
au lieu de$entity->setFieldDatetime(new Datetime())
.Remarque: La méthode
format()
est appelée automatiquement par la Doctrine.Essayez ceci:
Quelle que soit la
$value
que vous attribuez àcreated
domaine, doit être capable de gérer cet appel:Voir Doctrine en la matière la ligne de code
Testé pour fonctionner avec la Doctrine 2.5.4
Remarque: ci-dessus fonctionne au moment de sa création, mais pas sur la mise à jour par défaut -- vous devez régler manuellement
created
propriéténew \DateTime()
lorsque vous effectuez une mise à jour ou consulterdoStuffOnPrePersist
Pour PostgreSQL, vous devez juste être capable de passer de la chaîne de valeur de
now
pour le champ pour obtenir le timestamp de la fonction.