🪴
CakePHP 5 : マイグレーションでテーブルを作成してみる
はじめに
今回はマイグレーションでテーブルを作成する方法について方法を紹介します。
マイグレーション(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)の設定を変更する
- phpMyAdmin の左サイドバーのデータベース名をクリックします。
- 上部メニュー「操作」をクリックし、下部の「照合順序」で
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
参考資料
おわりに
これでテーブルが作成できました!
今回はタイプミス以外では、あまりエラーは出ませんでした。
私は後からデータを登録した時に文字化けを見つけたので、文字コードには要注意ですね。
次回はシードを作成してみたいと思います!
Discussion