2014-01-12 6 views
6

Wie kann ich das financial_year Feld als einzigartig mit Codeigniter Dbforge Migration machen?Create Eindeutiges Feld in Codeigner 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 
} 

Antwort

8

Es gibt keine Option, dies im Datenbanktreiber zu tun.

entweder schreiben Sie die SQL, um die Tabelle manuell zu erstellen, oder (und das ist nicht, was ich empfehlen würde) ändern Sie die DB_forge.php und Ihren Datenbanktreiber. (zB mysql_forge.php) um eindeutige Schlüssel zu haben. Wenn ich den Code betrachte, würde man einfach eine Klassenvariable namens 'unique_keys' haben und dem Code folgen, wo 'keys' und 'primary keys' eindeutige Schlüssel einfügen sollen.

Eine weitere Option ist die Verwendung von dbforge as geschrieben, dann modifiziert nur die Tabelle nach der Erstellung

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

Sollte es nicht sein '' '$ this-> db-> query' ""? Dies bricht meine Migration – sinhix

+0

Richtig - es sollte sein: '$ this-> db-> Abfrage ('ALTER TABLE financial_year HINZUFÜGEN UNIQUE INDEX (financial_year)');' –

3

Diese Frage als CodeIgniter2 markiert - @ pgee70 Antwort richtig ist

aber

CodeIgniter3 die Schaffung von einzigartigen Feldern unterstützt. Fügen Sie einfach

'unique'   => TRUE 

auf dem Gebiet

In diesem Fall:

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

siehe CodeIgniter user_guide

Verwandte Themen