2012-09-20 4 views
24

voglio aggiungere una colonna al settimo posto in classifica, io sto usandoaddColumn posizione migrazione Yii

$this->addColumn('table_name','column_name','type'); 

aggiunge la colonna alla fine. C'è un modo in cui posso menzionare il posto dove aggiungere la colonna? O qualsiasi parola dopo colonna parola chiave per aggiungere la mia nuova colonna dopo, per esempio, la colonna password. Ho imparato la migrazione da Yii Doc

risposta

40

Questo dovrebbe funzionare!

$this->addColumn('table_name', 'column_name', 'type AFTER column6'); 

esempi:

$this->addColumn('tbl_posts', 'email', 'VARCHAR(150) AFTER `name` '); 
$this->addColumn('tbl_posts', 'phone', 'string AFTER `email` '); 
+1

Grazie! Lo ha fatto :) Non ho trovato il modo di farlo nel doc, c'è qualcos'altro che mi riferisci a Yii. e solo un'ultima domanda, quando il nome della classe di migrazione sembra essere m120920_041119_update_users_about posso aggiungere $ this-> addColumn ('users', 'about_ME', 'string AFTER password'); Il _ME deve essere nel nome della classe? –

+0

Funziona, ma funziona con l'inganno; quando Yii compone l'SQL, semplicemente 'copia e incolla' il valore 'tipo' in sql, e, casualmente, la sintassi 'tipo AFTER a_column' genera un SQL valido. Naturalmente, sono felice di usare da ora, e grazie per averci mostrato questo metodo. – realtebo

+2

Un sacco di cose è fatto da "ingannare" nel mondo Yii (e PHP (e programmazione (e vita))). –

15
$this->addColumn('{{%user}}', 'username', 
      $this->string()->notNull()->unique()->after('id') 
      ); 
+3

Questo funziona bene ed è elegante. Grazie! –

+1

QUESTO è * il modo * dovrebbe essere. – christian