🗂

CakePHP5 主キーに「id」を使用しない 「id」以外の主キー

2024/01/24に公開

別システムからの移行でCakeのルールに沿わないテーブル構造です。マスタ的なテーブルであるため、ルールに沿ってCakeの恩恵をうけるよりはそのままのテーブル構造で進める方がコストが少ないと判断しました。

cake bake のあと

Entityの_accessibleに追加

src/Model/Entity/Xxx.php
class XXX extends Entity
{
    protected array $_accessible = [
        'code' => true,  // ← 主キーカラム追加
        ...

Table の validator を追加

src/Model/Table/Xxx.php
public function validationDefault(Validator $validator): Validator
    {
        $validator
            ->scalar('code')
            ->requirePresence('code', 'create')
            ->notEmptyString('code');

ビューに追加

templates/xxx/add.php
<?php
    echo $this->Form->control('code', ['type' => 'text']);

edit.php は編集しない。主キーは変更できない仕様にするのがよさそう。頑張るところじゃないね。

あと、アソシエーションの設定が必要になるかもsrc/Model/Table/XxxTable.php の initialize に hasManyの設定と、相手のTable.phpのinitialezeに belongsTo の設定と。

Discussion