スポンサーリンク

CakePHPで,規約に従わない命名法のDBは,Scaffoldが動くことを期待するな

CakePHPの命名規約に従っていない既存DBに対して,CakeのScaffoldを動作させようとした時の苦労について。

Scaffoldは,DBの命名法が規則に従っていることを要求する

いや~,焦ったわ。

email_idというカラムがあって,これがEmailというモデルを強制的に参照してしまって,
Scaffoldが動かなかったんだわ。

カラム名の末尾の「_id」が余分で,それに対応するテーブルが存在していないということ。


ああ,外部キーを無効化したい,無視したい,解除したい。
自動的に認識させないようにしたい。
だめだな。

CAKEPHPって,規約に合ったテーブルを最初から作れない場合は,
使っちゃいけないんだ。

いい教訓になった。


unbindもできない。

        $this->unbindModel(['belongsTo' => 'Email'], false);

CAKE3では,unbindModelは削除だと。


scaffoldもCAKE特有の機能だし,規約に従っていることが動作の前提なんだろうな。

てことは,DBが規約に従ってない状態で,SCAFFOLDを動作させようとする試み自体がおかしいのだろう。

画面を自分で書こう。

対処法が見つかった

コントローラ側のFINDが問題だったわけか・・・。
containで制御するようになったから。

    public function index()
    {
        $this->paginate = [
            'contain' => ['Email', ・・・・・・]
        ];
        $callDetail = $this->paginate($this->CallDetail);

        $this->set(compact('callDetail'));
    }

containの中には,カラム名が「_id」で終わるようなカラムが一通り列挙されており,外部モデルとのリレーションを自動的にここで生成しようとしている。

containの部分を削除したら,SCAFFOLD生成コードのINDEXが動くようになった。