CodeIgniter4のデータベースマイグレーション

この記事は CodeIgniter Advent Calendar 2020 - Qiita の12日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

公式チュートリアルの news テーブル(「MySQLでのデータベースの準備」参照)の作成をデータベースマイグレーションでできるようにしてみます。

すでに作成済みの news テーブルは drop table してください。

Migration ファイルの作成

ファイルの作成

spark コマンドでファイルの雛形を作成します。

$ php spark migrate:create create_table_news

app/Database/Migrations/2020-12-11-103902_create_table_news.php のようなファイルができました。

app/Database/Migrations/2020-12-11-103902_create_table_news.php

<?php namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateTableNews extends Migration
{
    public function up()
    {
        //
    }

    //--------------------------------------------------------------------

    public function down()
    {
        //
    }
}

中身の記述

up()down() メソッドを記述します。

<?php
namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateTableNews extends Migration
{
    public function up()
    {
        $this->forge->addField(
            [
                'id' => [
                    'type' => 'INT',
                    'constraint' => 11,
                    'unsigned' => true,
                    'auto_increment' => true,
                ],
                'title' => [
                    'type' => 'VARCHAR',
                    'constraint' => '128',
                    'null' => false,
                ],
                'slug' => [
                    'type' => 'VARCHAR',
                    'constraint' => '128',
                    'null' => false,
                ],
                'body' => [
                    'type' => 'TEXT',
                    'null' => false,
                ],
            ]
        );
        $this->forge->addPrimaryKey('id');
        $this->forge->createTable('news');
    }

    //--------------------------------------------------------------------

    public function down()
    {
        $this->forge->dropTable('news');
    }
}

マイグレーションの実行

マイグレーションを実行します。

$ php spark migrate
CodeIgniter CLI Tool - Version 4.0.4 - Server-Time: 2020-12-11 19:53:00pm

すべての新しいマイグレーションを実行しています...
        実行中: (App) 2020-12-11-103902_App\Database\Migrations\CreateTableNews
Done

作成されたテーブルの確認

news テーブル

mysql コマンドで MySQL に接続して確認してみます。

mysql> desc news;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| title | varchar(128)     | NO   |     | NULL    |                |
| slug  | varchar(128)     | NO   |     | NULL    |                |
| body  | text             | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

良さそうですね。

migrations テーブル

CodeIgniter が migration 情報を保存する migrations テーブルも確認しておきましょう。

mysql> select * from migrations \G
*************************** 1. row ***************************
id: 1
version: 2020-12-11-103902
class: App\Database\Migrations\CreateTableNews
group: default
namespace: App
time: 1607683980
batch: 1
1 row in set (0.02 sec)

この記事は CodeIgniter Advent Calendar 2020 - Qiita の12日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

参考

Date: 2020/12/12

Tags: codeigniter, codeigniter4, database