CodeIgniter4のマイグレーションを使ってみる

CodeIgniter

CodeIgniter4でのマイグレーションを使ってみます。

CodeIgniter3でもマイグレーションクラスのサポートはありましたが、

そのベースからどれくらい変わったのでしょうか。

マイグレーションを試す

ファイルの作成からロールバックくらいまでを簡単に見ていきます。

マイグレーションファイルの作成

sparkコマンドで雛形を作成してみます。

migrate:createは非推奨になっていたので、make:migrationを使います。

# php spark make:migration AddProduct --suffix

CodeIgniter v4.1.3 Command Line Tool - Server Time: 2021-07-27 08:41:45 UTC-05:00

File created: APPPATH/Database/Migrations/2021-07-27-134146_AddProductMigration.php

ちなみにphp spark make:migrationのみでファイル名を指定しない場合は、

対話モードでファイル名を決められます。

できあがった雛形は以下のような感じです。

<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

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

	public function down()
	{
		//
	}
}

これからupとdownの中身を作成していきます。

<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class AddProductMigration extends Migration
{
	public function up()
	{
		$this->forge->addField([
			'id'  => [
				'type'           => 'INT',
				'constraint'     => 5,
				'unsigned'       => true,
				'auto_increment' => true,
			],
			'name'  => [
				'type'       => 'VARCHAR',
				'constraint' => '100',
			],
			'code'  => [
				'type'       => 'VARCHAR',
				'constraint' => '100',
			],
			'created_at datetime default current_timestamp', 
			'updated_at' => [
				'type' => 'datetime',
				'null' => true,
			],
		]);

		$this->forge->addKey('id', true);
		$this->forge->createTable('products');
	}

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

マイグレーションファイルの実行

実行の前にマイグレーションの状態を確認します。

# php spark migrate:status

+-----------+-------------------+---------------------+-------+-------------+-------+
| Namespace | Version           | Filename            | Group | Migrated On | Batch |
+-----------+-------------------+---------------------+-------+-------------+-------+
| App       | 2021-07-27-134146 | AddProductMigration | ---   | ---         | ---   |
+-----------+-------------------+---------------------+-------+-------------+-------+
# php spark migrate

Running all new migrations...
        Running: (App) 2021-07-27-134146_App\Database\Migrations\AddProductMigration
Done migrations.

作成できているか確認してみます。

mysql> show tables;
+---------------+
| Tables_in_ci4 |
+---------------+
| migrations    |
| products      |
+---------------+
2 rows in set (0.01 sec)

生成したテーブル構造です。

mysql> desc products;
+------------+--------------+------+-----+-------------------+-------------------+
| Field      | Type         | Null | Key | Default           | Extra             |
+------------+--------------+------+-----+-------------------+-------------------+
| id         | int unsigned | NO   | PRI | NULL              | auto_increment    |
| name       | varchar(100) | NO   |     | NULL              |                   |
| code       | varchar(100) | NO   |     | NULL              |                   |
| created_at | datetime     | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | datetime     | YES  |     | NULL              |                   |
+------------+--------------+------+-----+-------------------+-------------------+
5 rows in set (0.00 sec)

ステータスを確認してみます。

 php spark migrate:status


+-----------+-------------------+---------------------+---------+---------------------+-------+
| Namespace | Version           | Filename            | Group   | Migrated On         | Batch |
+-----------+-------------------+---------------------+---------+---------------------+-------+
| App       | 2021-07-27-134146 | AddProductMigration | default | 2021-07-27 09:20:58 | 1     |
+-----------+-------------------+---------------------+---------+---------------------+-------+

ロールバックする

特にオプションなどは指定せずやってみます。

# php spark migrate:rollback 

Rolling back migrations to batch:  0
        Rolling back: (App) 2021-07-27-134146_App\Database\Migrations\AddProductMigration
Done rolling back migrations.
mysql> show tables;
+---------------+
| Tables_in_ci4 |
+---------------+
| migrations    |
+---------------+

問題なく戻せているようです。

まとめ

雑感ですが、sparkを利用できるのでスムーズな印象を受けました。

ちなみにCodeIgniter4.0の頃にはcurrentなどのメソッドがありましたが、

4.1.3ではなくなっているようです。

その他にもいくつかメソッドは追加変更されているようです。

この辺りはまだ変更することがあるかもしれないですね。

タイトルとURLをコピーしました