Cakephp PHP WEB開発

[Cakephp2→4]モデル編: updatedカラムをmodifiedのように更新対応させる

※本サイトはPR表記を含みます。

Cakephp1の時代の名残から、歴史の長いシステムなどでは保存する際にデータベースカラムの名前は、新規: createdと更新: updated という形になっている場合があります。(Cakephp1あんましらんけど)

Cakephp2以降?からは新規は変わらないものの、更新時は公式ドキュメント上、modifiedというカラム名になっていますす。

 

Cakephpを4に移行する際、この辺りを考慮に入れておかないと「自動更新が有効になっていない状態」になります。

Cakephp4ではビヘイビアのTimestampを利用することで、その役目を担います。その上でupdatedを更新時の自動保存に対応させます。

具体的なコードは以下です。

<?php
declare(strict_types=1);

namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class HogesTable extends Table
{
    /**
     * テーブルインスタンス初期化(コンストラクタの後に呼ばれる)
     *
     * @param array $config 特に設定なし
     * @return void
     */
    public function initialize(array $config): void
    {
        parent::initialize($config);

        $this->addBehavior('Timestamp', [
            'events' => [
                'Model.beforeSave' => [
                    'created' => 'new',
                    'updated' => 'always',
                ],
            ],
        ]);
    }
}

$this->addBehavior('Timestamp')eventsオプションを指定することで、更新時などにupdatedmodifiedのように日時更新されますです。

-Cakephp, PHP, WEB開発
-