Создать уникальное поле в Codeigniter DBForge Migration
Как я могу сделать financial_year
поле как уникальное использование Codeigniter Dbforge
миграция?
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
}
2 ответа
В драйвере базы данных нет возможности сделать это.
либо напишите SQL для создания таблицы вручную, либо (и это не то, что я бы порекомендовал) измените DB_forge.php и драйвер вашей базы данных. (например, mysql_forge.php), чтобы иметь уникальные ключи. глядя на код, я думаю, у вас будет просто переменная класса с именем "unique_keys" и следуйте коду, в котором "ключи" и "первичные ключи" предназначены для добавления уникальных ключей.
Другой вариант - использовать dbforge, как написано, а затем просто модифицировать таблицу после создания.
$this->db->query('ALTER TABLE `financial_year` ADD UNIQUE INDEX (`financial_year`)');
Этот вопрос помечен как CodeIgniter2 - @pgee70 Ответ правильный
но
CodeIgniter3 поддерживает создание уникальных полей. Просто добавь
'unique' => TRUE
в поле
В этом случае:
'financial_year' => array(
'type' => 'VARCHAR',
'constraint' => 20,
'unique' => TRUE
),