2010-09-29 13 views
15

Jaki jest sposób złożyć aktualny timestamp bezpośrednio na INSERT lub UPDATE? Gdybym był uruchomiony zwykły SQL, użyłbym funkcji NOW() dla konkretnego pola SQL przy wysyłaniu. Jak to zrobić z CakePHP?Złożenie aktualny timestamp w CakePHP

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

Odpowiedz

21

W CakePHP, można dołączyć funkcję NOW() Niecytowany za pomocą DboSource::expression

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

To jest preferowane sposób włączenia funkcji MySQL do twoich zapisów.

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

+0

więc musiałbym manipulować opublikowanymi danymi przed ich zapisaniem. – macha

+1

Tak. Ale dodaje tylko jeden element do tablicy. Ponadto, jeśli masz pola w tabeli o nazwach 'created' i' updated', cakephp automatycznie zaktualizuje je odpowiednio w instrukcjach 'INSERT' i' UPDATE'. Preferuję jednak ręczne dodawanie elementu. – webbiedave

+0

Ups, stwórz 'created' i' modified' – webbiedave

7

jeśli dodać tworzone i modyfikowane kolumn w tabeli was będą one automatycznie wypełniane aktualnym stemplem czasowym. Jeśli przypadek jest inny - tzn. Chcesz wypełnić pole, które później chcesz zmodyfikować, prawdopodobnie najlepiej będzie użyć rozwiązania edoryńskiego.

+0

To ciasto sposób i powinny być ulubioną odpowiedź +1. Jeśli OP będzie wymagał pola modyfikowalnego, powinna być bardziej szczegółowa. – benjamin

0

Może się to wydawać banalne dla doświadczonych użytkowników, ale dla ogółu początkujących może to być pomocne również podać kod Zastosowanie:

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

, który ma zostać dodany do głowy źródłowego (byłoby lepiej jako komentarz, ale nie mogę komentować, ale :))