CakePHPで作成日と更新日の日付を自動的に入力する方法

CakePHPで作成日と更新日の日付を自動的に入力する方法

224 回閲覧されました

みなさんこんにちは、jonioです。

今回はaddアクションをして作成した時にcreatedカラムとmodifiedカラムに自動で日付を入力する方法を解説します。

バージョン

4.5.4で動作の確認をしました。

〜Table.php

「CakePHPのプロジェクト > src > Model > Table」の下の階層にある〜Table.phpに追記します。

public function initialize(array $config): void
{
  parent::initialize($config);

  $this->setTable('companies');
  $this->setDisplayField('name');
  $this->setPrimaryKey('id');


  //ここから追加
  $this->addBehavior('Timestamp', [
    'events' => [
      'Model.beforeSave' => [
        'created' => 'new',
        'modified' => 'always'
      ]
    ]
  ]);
  //ここまで追加
  
  
}

14行目のnew・15行目のalwaysの意味は下記になります。

  • new : レコードが新規作成された日時を設定
  • always : レコードが新規作成された時または更新された日時を設定

だから例えば記事を初めて投稿したらcreatedとmodifiedに日時が設定されて更新されたらmodifiedに日時が設定されます。

そしてモデルを作成した時に〜Table.phpの中に下記があると思うのですが削除しないと動作しないので削除して下さい。

$validator
  ->dateTime('created')
  ->requirePresence('created', 'create')
  ->notEmptyDateTime('created');

$validator
  ->dateTime('modified')
  ->requirePresence('modified', 'create')
  ->notEmptyDateTime('modified');

これで完成です。