Създайте уникално поле в 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“, и ще следвате кода, където „keys“ и „primary 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
    ),

вижте CodeIgniter user_guide

person lumos0815    schedule 24.09.2016