mardi 27 mai 2014

DateTime comme clef primaire dans Symfony2 / Doctrine

Symfony2, qui utilise Doctrine, ne permet pas de base de définir un champ de type DateTime comme un identifiant d'entité.

Le problème ne vient ni de Symfony2, ni de Doctrine (quoi que). L'UnitOfWork de Doctrine essaye de convertir en string tous les champs identifiants d'une entité, mais la classe DateTime de PHP ne contient pas la méthode magique __toString().

A cause de ça, si vous définissez un champ de type DateTime en identifiant pour votre entité, vous allez avoir une erreur "Cannot convert DateTime to string".

Le bundle DoctrineBundle vous permet, entre autre, d'ajouter un type de champ PrimaryDateTime. Ce type de champ fonctionne exactement comme DateTime (il l'étend en interne),tout en ajoutant la méthode __toString() qui permet à l'UnitOfWork de fonctionner.

Aucun commentaire:

Publier un commentaire