前提
下記のようなテーブル構造でサービスを運用しているとします。
①users:id・email・password
②informations:id・user_id・tel・adress・thumbnail
usersとinformationsは親子関係
※usersが親でinformationsが子。user情報の一部を別テーブルinformationsで管理している。
やりたいこと
テーブルの分類をわかりやすくする
テーブル名が「informations」だと、なんの情報だかわからないので、usersの情報であることを明言するために「user_informations」に変更します。
影響範囲は小さくしたい
テーブル構造を変更するわけではないし、影響範囲が大きくなってエラーが多発することは避けたいです。
なので、既存のInformations.phpをそのまま利用する形とします。
※UserInformationsTableにファイル名を変更して、リレーションを書き直して、Controllerでデータ取得する際のコードを全て書き換えて、テストして、とかやりたくない・・・。
対応
①テーブル名を変更します。
※今回の場合はinformations→user_informationsに変更
②src/Model/Informations.phpを編集します。$this->setTable()が該当箇所です。
public function initialize(array $config): void
{
parent::initialize($config);
//ここを書き換える
//$this->setTable('informations');
$this->setTable('user_informations');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
・・・
}
③以下のコマンドを実行して、キャッシュクリアします。
bin/cake cache clear_all
これで、他のファイルは一切いじらずに、テーブル名の変更に対応できます。
注意点
この記事で行った対処は、今回のように「分類名を付け加える」程度ならまだいいですが、テーブル名を全く異なるものにする場合には混乱を招くのは不適切です。
また、「DB名を変更する」と言う事態は極力避けるため、DB設計はサイトを実際に作る前に慎重に行いましょう。
関連記事
そもそもsrcって何?Modelって何?という人は以下の記事をご参照ください。
参考
CakePHP4公式:テーブルオブジェクト
コメント