symfony : Doctrine et Timestampable
Par Francis Besset le vendredi 19 février 2010 - Symfony | Lien permanent

Je dois vous avouer que je suis vraiment surexcité de me lancer vraiment dans symfony après avoir assisté au Symfony Live 2010, en commençant un projet, je me suis lancé à la découverte du comportement actAs dans le schéma de Doctrine.
Heureusement pour moi, j'ai vidé de mes poches les deux trois sous qui me restaient pour investir dans le livre Plus loin avec symfony 1.3 & 1.4.
C'est donc dans ce livre-là que j'ai appris que actAs était un comportement.
Je me suis interrogé sur le pourquoi du comment actAs: { Timestampable: ~ } créait deux champs supplémentaires qui sont created_at et updated_at, et surtout comment ces informations étaient automatiquement mises à jours lors de requêtes d'insertions ou de mises à jour.
En réalité en indiquant Timestampable, vous appellerez le template Doctrine_Template_Timestampable qui se situe dans le dossier :
./lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Template/Timestampable.php
Alors concrètement Timestampable est un template. On peut donc partir dans la logique que l'on peut créer nos propres templates et ce qui est ..... totalement VRAI !
Alors que fait exactement ce template ?
Si vous avez uniquement le signe ~ alors il vous créera les champs created_at et updated_at.
Cependant vous avez aussi la possibilité de désactiver la création d'un des deux champs voir même des deux mais dans le dernier cas, il n'y a aucun intérêt de déclarer Timestampable.
Pour vous, je vais vous indiquer comment éviter de créer le champ created_at et ensuite updated_at :
Désactiver le champ created :
actAs:
Timestampable:
created:
disabled: true
Désactiver le champ updated :
actAs:
Timestampable:
updated:
disabled: true
L'autre contrainte est que par défaut, le nom du champ est created_at et la date et de type DateTime.
Vous souhaitez peut-être avoir uniquement une date de type Date. Pour faire ceci, vous devez procéder ainsi :
actAs:
Timestampable:
created:
name: created_date
format: Y-m-d
Ce que j'aime c'est que dans le moindre détail on peut aller assez loin et on ne reste pas esclave par des options limitées.
Cet article est déjà une bonne introduction à Timestampable. Si vous souhaitez en savoir plus, vous avez l'option de vous rendre sur la documentation de Doctrine.




Commentaires
For career, dare not say what improvement. Because have been jobs, and although some of his about go hard, but not really is successful, recently came to a new company, is very hard, I went for business, and then give me the opportunity to learn, also let I good effort.