Foreign/Primary Key Constraints in Migrations


I’ve googled and read the migration part from the yii guide, but I couldn’t find anything about defining foreign/primary key constraints for the migrations. Can anybody show me a example migration to define the foreign/primary key constraints?



Sorry, no offense, maybe I misunderstood your question.

But if I understand your question correctly I just HAVE to say that:

Your google skills must be very VERY bad…

Nearly ALL pages show how to do it.

But here is an example:

use yii\db\Schema;

use yii\db\Migration;

class m150520_074522_init_tbl_example extends Migration


    public function up()



        $tableName = 'my_example_table';

        $tableOptions = null;

        if ($this->db->driverName === 'mysql') {

            $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';


        # CREATE TABLE

        $this->createTable($tableName, [

                // primary key of this table

                'id'                    => Schema::TYPE_PK, 

                // FK to user_table 

                'user_id'               => Schema::TYPE_INTEGER . ' NOT NULL',

                'created_at'            => Schema::TYPE_INTEGER . ' NOT NULL',

                'updated_at'            => Schema::TYPE_INTEGER . ' NOT NULL',

            ], $tableOptions


        # ADD FOREIGN_KEY 

        # FROM my_example_table.user_id TO

        $this->addForeignKey('FK_example_to_user', $tableName, 'user_id', 'user_table', 'id', 'CASCADE','CASCADE');


        # create unique index if needed

        $this->createIndex('UNIQ_IDX_FK_example_to_user', $tableName, 'user_id', true);


    public function down()


        # DROP TABLE




Hope this helps.


Easy :)

Add to your migrate UP section something like this:

      $this->addForeignKey('FK_post_to_user', $tableName, 'userid', 'user', 'id', 'CASCADE','CASCADE');

where ‘userid’ - is you column with users id’s, ‘user’ - is reference table and ‘id’(primary key) - is column with id in reference table.

Enjoy it!

Thank you guys! :)