Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create Unique field in Codeigniter DBForge Migration

How can I make the financial_year field as unique using Codeigniter Dbforge migration?

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
}
like image 431
Anshad Vattapoyil Avatar asked Jan 12 '14 11:01

Anshad Vattapoyil


2 Answers

There is not an option to do that in the database driver.

either write the SQL to create the table manually, or (and this isn't what i would recommend) change the DB_forge.php and your database driver. (eg mysql_forge.php) to have unique keys. looking at the code i guess you would just have a class variable called 'unique_keys' and follow the code where 'keys', and 'primary keys' are to add unique keys in.

another option is to use the dbforge as written, then just modifiy the table after creation

$this->db->query('ALTER TABLE `financial_year` ADD UNIQUE INDEX (`financial_year`)');
like image 103
pgee70 Avatar answered Nov 07 '22 12:11

pgee70


This question is marked as CodeIgniter2 - @pgee70 Answer is correct

but

CodeIgniter3 supports the creation of unique fields. Just add

'unique'            => TRUE

to the field

In this case:

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

see CodeIgniter user_guide

like image 24
lumos0815 Avatar answered Nov 07 '22 12:11

lumos0815