在 Codeigniter DBForge 迁移中创建唯一字段

Posted

技术标签:

【中文标题】在 Codeigniter DBForge 迁移中创建唯一字段【英文标题】:Create Unique field in Codeigniter DBForge Migration 【发布时间】:2014-01-31 04:46:18 【问题描述】:

如何使用Codeigniter Dbforge 迁移使financial_year 字段唯一?

function up() 

    $this->dbforge->add_field(array(
        'id'    =>  array(
            'type'              =>  'INT',
            'constraint'        =>  11,
            'unsigned'          =>  TRUE,
            'auto_increment'    =>  TRUE
        ),
        'financial_year'    =>  array(
            'type'              =>  'VARCHAR',
            'constraint'        =>  20
        ),
        'start_date'    =>  array(
            'type'              =>  'DATE'
        ),
        'end_date'  =>  array(
            'type'              =>  'DATE'
        ),
        'status'    =>  array(
            'type'              =>  "ENUM",
            'constraint'        =>  "'Active','Inactive'",
            'default'           =>  "Active"
        ),
        'created_on'    =>  array(
            'type'              =>  'TIMESTAMP'
        )
    ));

    $this->dbforge->add_key('id', TRUE); // add `id` as primary key

    $this->dbforge->create_table('financial_year'); // create table schema

【问题讨论】:

【参考方案1】:

在数据库驱动程序中没有这样做的选项。

要么编写 SQL 来手动创建表,要么(我不建议这样做)更改 DB_forge.php 和您的数据库驱动程序。 (例如 mysql_forge.php)具有唯一键。查看代码我猜你只会有一个名为“unique_keys”的类变量,然后按照“键”和“主键”添加唯一键的代码。

另一种选择是使用所写的 dbforge,然后在创建后修改表

$this->db->query('ALTER TABLE `financial_year` ADD UNIQUE INDEX (`financial_year`)');

【讨论】:

不应该是$this->db->query 吗?这打破了我的迁移 正确 - 应该是:$this->db->query('ALTER TABLE financial_year ADD UNIQUE INDEX (financial_year)'); 这种情况下的向下迁移是:$this->db->query('ALTER TABLE financial_year DROP INDEX (financial_year)');【参考方案2】:

这个问题被标记为 CodeIgniter2 - @pgee70 答案是正确的

但是

CodeIgniter3 支持创建唯一字段。 只需添加

'unique'            => TRUE

到现场

在这种情况下:

'financial_year'    =>  array(
        'type'              =>  'VARCHAR',
        'constraint'        =>  20,
        'unique'            => TRUE
    ),

见 CodeIgniter user_guide

【讨论】:

以上是关于在 Codeigniter DBForge 迁移中创建唯一字段的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter系统中的迁移问题

集成/迁移两个 CodeIgniter 应用程序。

如何运行 CodeIgniter 迁移?

Devart dbForge Studio 2020 for MySQL Enterprise中文版

将项目从PC迁移到其他PC后,错误在codeigniter中不推荐使用each()函数[重复]

使用新的dbForge Studio for SQL Server v5.8进行数据库差异管理