トップページ > PHP > CakePHP3.xでcreatedとmodifiedを2.x同様に自動的に更新する方法
PHP

CakePHP3.xでcreatedとmodifiedを2.x同様に自動的に更新する方法

cakephp

仙台の皆さん!こんにちは!

以前作った案件は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へ変更するのは結構大変です。先は長いです。

それではまた!仙台・宮城でのホームページ制作やサイトリニューアルならダテナまで!

関連記事

仙台・宮城でのWEB制作ならダテナまで
ダテナは、宮城県でWEB制作をしています。ホームページに関するお困りごとなどございましたら、お気軽にお問合せください。