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が動くようになった。