仙台の皆さん!こんにちは!
以前作った案件はCakephp2.xで構築したものが多くありましたが、phpのバージョンのアップ等々で3.xへ変更する必要が迫られてきました。
3.xに触れてみてまず凹んだのは、「created」と「modified」が自動的に更新されないということ。
データベースからデータを取得する時に、createdやmodifiedでソートすることが多いので、この機能は必須です。
目次
テーブルクラスでTimestampを設定
それでは、具体的に2.x同様にcreatedとmodifiedが自動的に更新されるようにしたいと思います。
まずはテーブルクラスのnitialize()の設定をします。addBehavior()で「Timestamp」と指定します。
class UserTable extends Table{
public function initialize(array $config){
$this->addBehavior('Timestamp');
}
}
基本はこの設定だけでcreatedとmodifiedに値が入りますが・・・9時間ずれた値が入ってしまいます。タイムゾーンですね。
タイムゾーンを修正
bootstrap.php
その解決方法はまずはconfig/bootstrap.phpで96行目あたりにあるdate_default_timezone_setを下記のように変更します。
date_default_timezone_set('UTC');
↓
date_default_timezone_set('Asia/Tokyo');
app.php
続いて、config/app.phpのデータベース設定のtimezoneを下記のように設定します。
'timezone' => 'UTC',
↓
'timezone' => '+09:00',
設定は以上です。これでレコードを更新する都度、日本時間の値がcreatedとmodifiedに登録されます。
まとめ
createdとmodified問題の他にも、findの方法なども変わっていてCake2.xから3.xへ変更するのは結構大変です。先は長いです。
それではまた!仙台・宮城でのホームページ制作やサイトリニューアルならダテナまで!