Comment utiliser des horodatages UNIX avec le comportement minutieux de la doctrine? J'ai trouvé le code suivant Snippet ici , mais je préfère ne pas ajouter manuellement Ceci partout:
3 Réponses :
Une méthode consisterait à utiliser les auditeurs de doctorine pour créer un équivalent d'horodatage UNIX lorsque l'enregistrement est récupéré et avant d'être enregistré:
class Base extends Doctrine_Record_Listener { public function preHydrate(Doctrine_Event $event) { $data = $event->data; $data['unix_created_at'] = strtotime($data['created_at']); $data['unix_updated_at'] = strtotime($data['updated_at']); $event->data = $data; } }
Il s'agit d'une question qui pourrait avoir une réponse plus facile que ce que j'ai pensé, en réalité ...
Commençons par ce que vous avez maintenant: p>
doctrine_record code>
- Je vais appelerez ce cours
test code>, pour mon exemple (s). Li>
- Dans ce modèle de test code> code>, vous souhaitez utiliser le comportement code> horodatage >>, mais avec des horodatages UNIX, et pas
datetime code> valeurs li>
- Et vous voulez cela sans avoir à écrire beaucoup de choses de configuration dans vos modèles.
(je peux comprendre que: moins de risque d'oublier une ligne quelque part et à des données erronées dans dB) em> li>
ul> li>
- un projet configuré et tout
- Ce qui signifie que vous savez que vous vous troncez avec la doctrine li>
- et que je ne parlerai pas des bases li>
ul> li>
UL>
Une solution à ce problème ne serait pas d'utiliser le comportement express par défaut horodatage code> avec la doctrine, mais que vous allez définir.
qui signifie, dans votre modèle, vous aurez quelque chose comme celui-ci au bas de SetferflinitionFinition Code> Méthode: p> xxx pré> (i Supposons que cela puisse aller dans la méthode code> Configuration code> aussi, BTW - peut-être que ce serait ce serait un endroit réel, en fait) em> p>
Ce que nous devons maintenant faire Est-ce que définit le comportement code> mytimesthable, donc il fait ce que nous voulons.
en tant que doctrine 'CODE> DOCTRINE_TEMPLATE_TIMESTAMBLABLE CODE> DÉJÀ LE JOINT ALÉCIALE (SAUF FORMAT, Bien sûr) EM>, nous en hériterons; Espérons que cela signifiera moins de code pour écrire ; -) strong> p> donc, nous déclarons notre classe de comportement comme ceci: p>
mysql> select * from test;
+----+--------+----------------+------------+------------+
| id | name | value | created_at | updated_at |
+----+--------+----------------+------------+------------+
| 1 | Test 1 | My Value 1 | 1248805507 | 1248805507 |
| 2 | Test 2 | My New Value 2 | 1248805583 | 1248805821 |
+----+--------+----------------+------------+------------+
2 rows in set (0.00 sec)
C'est une bonne réponse et devrait vraiment être de +100.
Merci! Eh bien, en fait, cela a été +100: il y avait une prime (vaut 100 représentants) sur cette question; et ma réponse a été acceptée ^^
c'est très simple. Il suffit de créer une méthode de setter pour votre champ avec un paramètre DateTime et utilisez la méthode de tostring pour la stocker comme entier. p>
Pourquoi ne pas utiliser l'horodatage par défaut qui utilise des champs DateTime?
Plus facile d'interagir avec des timbres d'époque simples.