🪴

CakePHP 5 : マイグレーションでテーブルを作成してみる

2023/10/16に公開

はじめに

今回はマイグレーションでテーブルを作成する方法について方法を紹介します。

マイグレーション(migration)は、「移行」とか「移動」という意味の英単語です。
CakePHP でのマイグレーションとは、データベースのテーブル、カラム、制約などを管理・操作する仕組みのことです。

バージョン情報

  • CakePHP: 5.0.1
  • mysql: 8.0
  • phpMyAdmin: 5.0.4

テーブル作成の手順

マイグレーションファイルをつくる

テーブル、カラムなどを管理するためのスクリプトをつくります。
このファイルを新しく生成するには、bin/cake bake migration コマンドを使用できます。
下記は "Articles" という名前のテーブルを作成したい場合です。

  • bin/cake bake migration Createテーブル名(テーブル名はアッパーキャメルケースを使います)
  • 続けて、カラム:データ型を指定します。
bin/cake bake migration CreateArticles title:string body:text created modified

※ id カラムは int 型で自動生成されるので、コマンドには含めなくても OK です。
※ created と modified のカラムの型はデフォルトで datetime になるので、型を指定する必要はありません。

文字コードを設定

データにマルチバイト文字列が含まれていると、日本語が文字化けすることがあります。
下記の方法のどちらかをしておけば文字化けしないと思うので、試してみてください。

1. データベース(phpMyAdmin)の設定を変更する

  1. phpMyAdmin の左サイドバーのデータベース名をクリックします。
  2. 上部メニュー「操作」をクリックし、下部の「照合順序」でutf8mb4_unicode_ciなどを選択、「実行」をクリックします。

2. マイグレーションファイルを変更する

マイグレーションファイルの table() の第2引数に['collation' => 'utf8mb4_unicode_ci']を追加します。

/config/Migrations/20231007012420_CreateArticles.php
<?php
declare(strict_types=1);
use Migrations\AbstractMigration;
class CreateArticles 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(): void
    {
	// ここで文字コードを指定
        $table = $this->table('articles', ['collation' => 'utf8mb4_unicode_ci']);
        $table->addColumn('title', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]);
        $table->addColumn('body', 'text', [
            'default' => null,
            'limit' => null,
            'null' => true,
        ]);
        $table->addColumn('created', 'datetime', [
            'default' => null,
            'null' => true,
        ]);
        $table->addColumn('modified', 'datetime', [
            'default' => null,
            'null' => true,
        ]);
        $table->create();
    }
}

マイグレーションを実行

以下のコマンドを実行して、テーブルを作成します。

bin/cake migrations migrate

参考資料

https://book.cakephp.org/migrations/3/ja/index.html

おわりに

これでテーブルが作成できました!
今回はタイプミス以外では、あまりエラーは出ませんでした。
私は後からデータを登録した時に文字化けを見つけたので、文字コードには要注意ですね。
次回はシードを作成してみたいと思います!

Discussion