2010-09-29 15 views
15

Quelle est la méthode pour soumettre un horodatage actuel directement sur un INSERT ou un UPDATE? Si je courais SQL normal, j'utiliserais la fonction NOW() pour le champ SQL spécifique sur la soumission. Comment ferais-je cela avec CakePHP?Envoi de l'horodatage actuel dans CakePHP

$this->Model->save($this->data) 

Répondre

21

Dans CakePHP, vous pouvez inclure la fonction NOW() sans échappement à l'aide DboSource::expression

$this->data['SomeModel']['your_datetime_field'] = DboSource::expression('NOW()'); 
$this->Model->save($this->data); 

C'est le préféré façon d'inclure des fonctions MySQL dans vos sauvegardes.

http://api.cakephp.org/2.3/class-DboSource.html#_expression

+0

donc je devrais manipuler les données publiées avant de les sauvegarder. – macha

+1

Oui. Mais c'est juste ajouter un élément de plus au tableau. De plus, si vous avez des champs dans votre table nommés 'created' et' updated', cakephp les mettra à jour automatiquement sur les instructions 'INSERT' et' UPDATE', respectivement. Cependant, je préfère ajouter l'élément manuellement. – webbiedave

+0

Oups, faites le 'created' et' modified' – webbiedave

7

si vous ajoutez les colonnes créées et modifiées en vous table, ils seront automatiquement avec horodatage en cours. Si le cas est différent, c'est-à-dire que vous voulez remplir un champ que vous souhaitez modifier ultérieurement, il est préférable d'utiliser la solution de l'ÉDORIEN.

+0

Ceci est le chemin du gâteau et devrait être la réponse préférée +1. Si le PO demande un champ modifiable, elle devrait être plus spécifique. – benjamin

0

Cela peut sembler trivial aux utilisateurs expérimentés mais pour débutants, il pourrait être utile de fournir également le code d'utilisation:

App::uses('DboSource', 'Model/DataSource'); 

, qui doit être ajouté à la tête de source (serait mieux comme un commentaire, mais je ne peux pas commenter, encore :))