升级迁移

文档

更改内容

  • 首先,不再支持顺序命名(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_Migration 替换为 extends Migration

  7. Forge 类中的方法名称已更改为使用驼峰式大小写。例如

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

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

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

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

  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