LoginSignup
16
15

More than 5 years have passed since last update.

【CakePHP】save()でTIMESTAMP型に現在時刻を保存する時、date()を使わない方が良い理由

Last updated at Posted at 2015-08-05

CakePHPでデータベースに対して insert や update を行う際、PHPのメソッドである date() メソッドは使用しないほうが良い。

代案

CakePHPにおいてDBに現在時刻を保存する場合はDboSource::expression('NOW()')を使うと良い。

理由

2つの表す時刻は次の通りである。

記述 表す時刻
date('Y-m-d H:i:s') PHPサーバ時刻
DboSource::expression('NOW()') DBサーバ時刻
SQLでNOW()を直ガキした場合やCURRENT_TIMESTAMPと記述した場合と同じ。
ConnectionManager::getDataSource('default')->expression('NOW()') DboSource::expression('NOW()')で、Non-static method DboSource::expression() should not be ...と言われるようならこっち。

ということである。
つまりは、前者はDBサーバとのタイムゾーンの整合性が保証されないのに対し、後者はそこが保証されるということ。

MySQLではDEFAULT CURRENT_TIMESTAMP, ON UPDATE CURRENT_TIMESTAMP制約は1テーブルにつき1カラムにしか設定できないなどの制約があり、データ更新時に手動で時刻を与えてやらなければならない場合がある。
この時先の制約を付けたカラムとの時刻整合性を保つためにはDboSource::expression('NOW()')を用いた方が良いということ。

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15