CakePHP4でマイグレーションしてテーブルを作成する方法
Created at
このブログdevil-code(デビルコード)を作った時のメモ。 頻繁にテーブル構造を変更したりはしないため、マイグレーションでテーブル作成やその他コマンドのやり方の備忘録として。 また、phpMyadminでテーブル管理できるのに何でわざわざマイグレーションするのかなど気になった点を調べてみた。
テーブル作成のやり方
さっそく知りたいことの結論から。 マイグレーションしてテーブルを作成する方法はこのような流れ。
- マイグレーションファイルを作成する
- マイグレーションを実行する
テーブルのみ作成する
- テーブル作成するときはbin/cake bake migration Createテーブル名✅
マイグレーションファイルを作成する。
$ bin/cake bake migration CreateBlogs
マイグレーションを実行する。
$ bin/cake bake migration migrate
これだけでテーブルが作成することができる。
カラムの作成
テーブルを作成すると同時にカラムを作成する
- 同時にデータ型の指定が可能✅
- bin/cake bake migration Createテーブル名 カラム名:カラム名の形✅
$ bin/cake bake migration CreateBlogs id:integer title:text body:text created:datetime modified:datetime
使用できるデータ型
指定 | SQLのデータ型 |
---|---|
string | CHAR または VARCHAR |
text | TEXT 型 |
uuid | UUID または CHAR(36) |
integer | INTEGER |
smallinteger | SMALLINT |
tinyinteger | TINYINT または SMALLINT |
float | DOUBLE または FLOAT |
decimal | DECIMAL |
boolean | BOOLEAN(MySQL の場合は TINYINT(1) ) |
binary | BLOB または BYTEA |
date | DATE |
datetime | DATETIME |
timestamp | TIMESTAMP |
time | TIME |
json | JSON |
作成してあるテーブルにカラムを追加する
$ bin/cake bake migration AddPvToBlogs
- カラムを追加するときはbin/cake bake migration Addカラム名Toテーブル名✅
- /config/Migrations/配下に作成されたマイグレーションファイルを編集することで調整が可能✅
<?php
declare(strict_types=1);
use Migrations\AbstractMigration;
class AddPvToBlogs extends AbstractMigration
{
/**
* Change Method.
*
* More information on this method is available here:
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
* @return void
*/
public function change()
{
$table = $this->table('Blogs');
$table->addColumn('pv', 'integer', [
'default' => 0, // ユーザー定義のデフォルトの値
'null' => false, // null許可
'comment' => 'pv数',
'after' => 'id', // カラムの位置(idカラムの後にpvを追加)
]);
$table->update();
}
}
その他コマンド
- Drop → テーブル削除
- Removeカラム名Fromテーブル名 → カラム削除
- Alterカラム名Onテーブル名 → カラム変更
そもそもマイグレーションってなんだっけ?
テーブル定義を管理する仕組みのことだよ。
マイグレーションのメリット
チーム開発ではマイグレーションファイルさえ共有してしまえば同じ構造のデータベースを簡単に作ることができてコスパが良い。 データベースの変更履歴も簡単に管理できる。 ロールバックができるのも魅力的。
最後に
別にDB管理をphpMyAdminやっても良い気がするけど、マイグレーションを使いこなせたらもっと簡単に管理ができることが分かった。