Yii Migrations: cheatsheet and examples
Last updated:up()method: gets called when we migrate up (or just callyiic migrate)down()method: gets called when we migrate downto create a migration:
cd to
protectedfolder and type:./yiic migrate create my_new_migration
to create a table using migrations:
<?php public function up() { $this->createTable('users', array( 'id'=>'pk', 'username'=>'string NOT NULL', 'password'=>'string NOT NULL', 'created_at'=>'DATETIME NOT NULL', 'last_login_at'=>'DATETIME NOT NULL', )); }slightly better table creation: supporting foreign keys and utf-8 by default:(MySQL only):
<?php public function up() { $this->createTable('users', array( 'id'=>'pk', 'username'=>'string NOT NULL', 'password'=>'string NOT NULL', 'created_at'=>'DATETIME NOT NULL', 'last_login_at'=>'DATETIME NOT NULL', ), 'ENGINE=InnoDB CHARSET=utf8'); }inserting a record into a table:
<?php public function up() { $this->insert('users', array( "id" => "1", "username" => "admin", "password" => sha1("admin"), "created_at"=>date('Y-m-d H:i:s'), "last_login_at"=>date('Y-m-d H:i:s'), )); }deleting a record from a table: (this was added in the
down()method just because we tend to delete stuff when we are migrating down or undoing a migration.)<?php public function down() { $this->delete( 'users',"id = '1'" ); }
creating an INT attribute:
<?php public function up() { $this->createTable('foo_bar', array( //more attributes.... 'type'=>'integer NOT NULL', )); }creating a composite primary key: (Yii is able to derive a
MANY_MANYrelation form this) see here: adding-a-composite-primary-key-for-mysql-using-yii-migrationssetting up a string as primary key (on MySQL). For some reason migrations don't work if you write
string pkas description for a column, but this works:<?php $this->createTable('foo_bar_baz', array( 'name'=>'string NOT NULL', 'PRIMARY KEY (name)' ),'ENGINE=InnoDB CHARSET=utf8');- creating a foreign key: this will bind
table1totable2in order to tell the database that the attributeforeign_idoftable1is actually attributeidontable2. The next two parameters tell the database what it should do totable1in case theidattribute oftable2gets deleted and updated, respectively. Possible values for those parameters are:"CASCADE","NO ACTION","RESTRICT"and"SET NULL"
<?php $this->addForeignKey('fk1', 'table1', 'foreign_id', 'table2', 'id','CASCADE','CASCADE');- creating a foreign key: this will bind
This is a w.i.p.(work in progress)