2010-09-29 7 views
15

Was ist die Methode, um einen aktuellen Zeitstempel direkt an eine INSERT oder eine UPDATE zu senden? Wenn ich reguläres SQL ausführen würde, würde ich die Funktion NOW() für das spezifische SQL-Feld bei der Übergabe verwenden. Wie würde ich das mit CakePHP machen?Aktuellen Zeitstempel in CakePHP einreichen

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

Antwort

21

In CakePHP können Sie umfassen die NOW() Funktion unescaped unter Verwendung DboSource::expression

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

Dies ist das bevorzugte Möglichkeit, MySQL-Funktionen in Ihre Speicher zu integrieren.

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

+0

so würde ich die gebuchten Daten vor dem Speichern manipulieren müssen. – macha

+1

Ja. Aber es fügt nur ein weiteres Element zum Array hinzu. Wenn Sie in Ihrer Tabelle Felder mit den Namen 'created' und' updated' haben, aktualisiert cackeph diese automatisch mit den Anweisungen 'INSERT' und' UPDATE'. Ich bevorzuge es jedoch, das Element manuell hinzuzufügen. – webbiedave

+0

Whoops, machen Sie die 'created' und' modified' – webbiedave

7

wenn Sie die erstellten und modifizierten Spalten in Ihnen Tabelle hinzufügen, werden sie automatisch mit aktuellen Zeitstempel bestückt werden. Wenn der Fall anders ist - d. H. Sie möchten ein Feld füllen, das Sie später ändern möchten, ist es wahrscheinlich am besten, die Lösung von edorian zu verwenden.

+0

Dies ist der Kuchen Weg und sollte die bevorzugte Antwort sein +1. Wenn das OP nach einem modifizierbaren Feld fragt, sollte sie genauer sein. – benjamin

0

Dies könnte erfahrene Benutzer trivial erscheinen, aber für totale Anfänger könnte es hilfreich sein, auch die Verwendung Code zur Verfügung zu stellen:

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

, die Quelle des Haupt hinzugefügt werden muss (würde als Kommentar besser sein, aber kann noch nicht kommentieren :))

Verwandte Themen