2014-01-12 7 views
6

Codeigniter Dbforgeの移行を使用して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 
} 

答えて

8

データベースドライバでこれを行うオプションはありません。

テーブルを手動で作成するには、SQLを記述するか、DB_forge.phpとデータベースドライバを変更してください(これは私が推奨するものではありません)。 (例えばmysql_forge.php)にユニークなキーを持たせてください。コードを見れば、 'unique_keys'という名前のクラス変数があり、 'キー'と 'プライマリキー'がユニークなキーを追加するコードに従います。

別の方法として、dbforgeを書かれ、その後、単に作成この質問はCodeIgniter2としてマークされている

$this->db->query('ALTER TABLE `financial_year` ADD UNIQUE INDEX (`financial_year`)'); 
+2

はそれが '' 'ます$ this-> DB-> query'すべきではない参照「?これはマイグレーションを中断します – sinhix

+0

正解です - '$ this-> db-> query( 'ALTER TABLE financial_year ADD UNIQUE INDEX(financial_year)');' –

3

後にテーブルをmodifiy - pgee70回答

しかし

CodeIgniter3はユニークなフィールドの作成をサポートして正しいです@。 ただ、この場合、フィールドに

'unique'   => TRUE 

を追加します。

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

CodeIgniter user_guide

関連する問題