CakePHP3でカラム設定を変更したい
テーブルを作成した後に、カラム設定を変更したいってことありますよね。
文字数を変更したいとか、データ型を変更したいとか。
当たり前のことなのですが、割とあります。
今回はその方法について説明していきます。
(目次)
【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7
①マイグレーションコマンドをする
まずはマイグレーションコマンドです。
macOSの場合で説明しますが、以下のようなかんじです。
./bin/cake bake migration ChangeUsers
この例ではUsersテーブルを変更したいとしてます。
マイグレーションファイル名をChangeUsersとしてみました。
正直ネーミングは何でもいいと思います。
public function change() { }
上記のようなマイグレーションファイルができています。
ここに以下を書き足します。
public function change() { $table = $this->table('users'); $table->changeColumn('age', 'integer', [ 'limit' => 2]); $table->update(); }
この例ではusersテーブルのageカラムをinteger型の文字の長さ2にしようとしています。
まず$table = $this->table('users');でテーブルを宣言し、変更内容を挟み、$table->update();で締めます。
これはこれで動きます。
ですが、②であることをすると、ロールバック(操作の巻き戻し)ができるようになります。
②up()とdown()に書き換えることでロールバックできるようにする
現状では、
public function change() { $table = $this->table('users'); $table->changeColumn('age', 'integer', [ 'limit' => 2]); $table->update(); }
こうなっています。
ロールバックできるようにしたいです。
そこでこれを
public function up() { $table = $this->table('users'); $table->changeColumn('age', 'integer', [ 'limit' => 2]); $table->update(); } public function down() { $table = $this->table('users'); $table->changeColumn('age', 'string', [ 'limit' => 3]); $table->update(); }
にすると、ロールバックできるようになります。
この例ではデータ型をstring→integerにして、文字の長さを3→2にしています。
ポイントは2つです。
①ファンクションup()に変更後の内容を書くこと
②ファンクションdown()に変更前の内容を書くこと
です。
これでロールバックできるようになります。
逆に言うと、ファンクションchange()ではロールバックできないということですね。
終わりに
以上となります。
慎重に書けばあまりロールバックすることはないですが、仕様変更だったりミス表記はありうるので、個人的にはぜひ覚えておきたい部分です。
以下のサイトを参考にさせていただきました。
CakePHP3のMigration(マイグレーション)でカラム追加・変更・削除を行う
ありがとうございました。