ブログ CakePHP4でマイグレーションしてテーブルを作成する方法のサムネイル

CakePHP4でマイグレーションしてテーブルを作成する方法

Created at

このブログdevil-code(デビルコード)を作った時のメモ。 頻繁にテーブル構造を変更したりはしないため、マイグレーションでテーブル作成やその他コマンドのやり方の備忘録として。 また、phpMyadminでテーブル管理できるのに何でわざわざマイグレーションするのかなど気になった点を調べてみた。

テーブル作成のやり方

さっそく知りたいことの結論から。 マイグレーションしてテーブルを作成する方法はこのような流れ。

  1. マイグレーションファイルを作成する
  2. マイグレーションを実行する

テーブルのみ作成する

  • テーブル作成するときは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

参考:CakePHP公式

作成してあるテーブルにカラムを追加する

$ 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やっても良い気がするけど、マイグレーションを使いこなせたらもっと簡単に管理ができることが分かった。