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ではなくなっているようです。
その他にもいくつかメソッドは追加変更されているようです。
この辺りはまだ変更することがあるかもしれないですね。