Создать уникальное поле в 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
}

person devo    schedule 12.01.2014    source источник


Ответы (2)


В драйвере базы данных нет возможности сделать это.

либо напишите SQL для создания таблицы вручную, либо (и это не то, что я бы рекомендовал) измените DB_forge.php и драйвер вашей базы данных. (например, mysql_forge.php), чтобы иметь уникальные ключи. Глядя на код, я думаю, у вас будет просто переменная класса с именем «unique_keys» и следовать коду, где «ключи» и «первичные ключи» должны добавлять уникальные ключи.

другой вариант - использовать dbforge как написано, а затем просто изменить таблицу после создания

$this->db->query('ALTER TABLE `financial_year` ADD UNIQUE INDEX (`financial_year`)');
person pgee70    schedule 22.02.2014
comment
Разве это не должно быть $this->db->query ? Это нарушает мою миграцию - person sinhix; 20.05.2014
comment
Правильно - должно быть: $this->db->query('ALTER TABLE financial_year ADD UNIQUE INDEX (financial_year)'); - person Aaron Geiser; 06.02.2015
comment
Миграция вниз в этом случае будет: $this->db->query('ALTER TABLE financial_year DROP INDEX (financial_year)'); - person gX.; 25.02.2020

Этот вопрос помечен как CodeIgniter2 - @pgee70 Ответ правильный

но

CodeIgniter3 поддерживает создание уникальных полей. Просто добавь

'unique'            => TRUE

в поле

В таком случае:

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

см. user_guide CodeIgniter

person lumos0815    schedule 24.09.2016