1. hashimotoryoh

    No comment

    hashimotoryoh
Changes in tags
Changes in body
Source | HTML | Preview
@@ -1,18 +1,19 @@
CakePHPでデータベースに対して insert や update を行う際、PHPのメソッドである date() メソッドは使用しないほうが良い。
# 代案
CakePHPにおいてDBに現在時刻を保存する場合は```DboSource::expression('NOW()')```を使うと良い。
# 理由
2つの表す時刻は次の通りである。
|記述|表す時刻|
|:---|:---|
|```date('Y-m-d H:i:s')```|PHPサーバ時刻|
|```DboSource::expression('NOW()')```|DBサーバ時刻<br>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()')```を用いた方が良いということ。