在 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 迁移中创建唯一字段的主要内容,如果未能解决你的问题,请参考以下文章
Devart dbForge Studio 2020 for MySQL Enterprise中文版