マイグレーションのアップグレード

ドキュメント

変更点

  • まず、マイグレーションの連続番号付け(001_create_users002_create_posts)は、もはやサポートされていません。CodeIgniterバージョン4では、タイムスタンプ方式(20121031100537_create_users20121031500638_create_posts)のみがサポートされています。連続番号付けを使用している場合は、各マイグレーションファイルの名前を変更する必要があります。

  • マイグレーションテーブルの定義が変更されました。CI3からCI4にアップグレードし、同じデータベースを使用する場合は、マイグレーションテーブルの定義とそのデータをアップグレードする必要があります。

  • マイグレーションの手順も変更されました。シンプルなCLIコマンドでデータベースのマイグレーションを実行できるようになりました。

php spark migrate

アップグレードガイド

  1. v3プロジェクトで連続番号のマイグレーション名を使用している場合は、タイムスタンプ名に変更する必要があります。

  2. すべてのマイグレーションファイルを新しいフォルダ**app/Database/Migrations**に移動する必要があります。

  3. defined('BASEPATH') OR exit('No direct script access allowed');が存在する場合は削除します。

  4. PHPタグの直後にこの行を追加します:namespace App\Database\Migrations;

  5. namespace App\Database\Migrations;行の下に、この行を追加します:use CodeIgniter\Database\Migration;

  6. extends CI_Migrationextends Migrationに置き換えます。

  7. Forgeクラス内のメソッド名は、camelCaseを使用するように変更されました。例:

    • $this->dbforge->add_field$this->forge->addField

    • $this->dbforge->add_key$this->forge->addKey

    • $this->dbforge->create_table$this->forge->createTable

    • $this->dbforge->drop_table$this->forge->dropTable

  8. (任意) 配列構文をarray(...)から[...]に変更できます。

  9. 同じデータベースを使用する場合は、マイグレーションテーブルをアップグレードします。

    • (開発環境) 新しいマイグレーションテーブルを作成するには、開発環境などで真新しいデータベースを使用してCI4マイグレーションを実行します。

    • (開発環境) マイグレーションテーブルをエクスポートします。

    • (本番環境) 既存のCI3マイグレーションテーブルを削除(または名前変更)します。

    • (本番環境) 新しいマイグレーションテーブルとそのデータをインポートします。

コード例

CodeIgniterバージョン3.x

パス:**application/migrations**

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration
{
    public function up()
    {
        $this->dbforge->add_field(array(
            'blog_id' => array(
                'type'           => 'INT',
                'constraint'     => 5,
                'unsigned'       => true,
                'auto_increment' => true,
            ),
            'blog_title' => array(
                'type'       => 'VARCHAR',
                'constraint' => '100',
            ),
            'blog_description' => array(
                'type' => 'TEXT',
                'null' => true,
            ),
        ));
        $this->dbforge->add_key('blog_id', true);
        $this->dbforge->create_table('blog');
    }

    public function down()
    {
        $this->dbforge->drop_table('blog');
    }
}

CodeIgniterバージョン4.x

パス:**app/Database/Migrations**

<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class AddBlog extends Migration
{
    public function up()
    {
        $this->forge->addField([
            'blog_id' => [
                'type'           => 'INT',
                'constraint'     => 5,
                'unsigned'       => true,
                'auto_increment' => true,
            ],
            'blog_title' => [
                'type'       => 'VARCHAR',
                'constraint' => '100',
            ],
            'blog_description' => [
                'type' => 'TEXT',
                'null' => true,
            ],
        ]);
        $this->forge->addKey('blog_id', true);
        $this->forge->createTable('blog');
    }

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

検索と置換

古いCI3ファイルを検索して置換するには、次の表を使用できます。

検索

置換

extends CI_Migration

extends Migration

$this->dbforge->add_field

$this->forge->addField

$this->dbforge->add_key

$this->forge->addKey

$this->dbforge->create_table

$this->forge->createTable

$this->dbforge->drop_table

$this->forge->dropTable