How to create a migration correctly?

CREATE TABLE `source_message`
(
   `id`          integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `category`    varchar(255),
   `message`     text
);

CREATE TABLE `message`
(
   `id`          integer NOT NULL,
   `language`    varchar(16) NOT NULL,
   `translation` text
);

ALTER TABLE `message` ADD CONSTRAINT `pk_message_id_language` PRIMARY KEY (`id`, `language`);
ALTER TABLE `message` ADD CONSTRAINT `fk_message_source_message` FOREIGN KEY (`id`) REFERENCES `source_message` (`id`) ON UPDATE CASCADE ON DELETE RESTRICT;
<?php

use yii\db\Migration;

/**
 * Handles the creation of table `{{%source_message}}`.
 */
class m220829_135557_create_source_message_table extends Migration
{
    /**
     * {@inheritdoc}
     */
    public function safeUp()
    {
        $this->createTable('{{%source_message}}', [
            'id' => $this->primaryKey(),
            'category' => $this->string(32)->notNull(),
            'message' => $this->text()->notNull()
        ]);

        $this->addForeignKey('fk_message_source_message', 'message', 'id', '{{%source_message}}', 'id', 'CASCADE', 'RESTRICT');

        // $this->addForeignKey('{{%fk-message-source_message}}', '{{%message}}', 'message', '{{%source_message}}', 'id', 'CASCADE', 'RESTRICT');
    }

    /**
     * {@inheritdoc}
     */
    public function safeDown()
    {
        $this->dropTable('{{%source_message}}');
    }
}
<?php

use yii\db\Migration;

/**
 * Handles the creation of table `{{%message}}`.
 */
class m220829_135609_create_message_table extends Migration
{
    /**
     * {@inheritdoc}
     */
    public function safeUp()
    {
        $this->createTable('{{%message}}', [
            'id' => $this->primaryKey(),
            'language' => $this->string(16)->notNull()->unique(),
            'translation' => $this->text()->notNull()
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function safeDown()
    {
        $this->dropTable('{{%message}}');
    }
}

best way is running ./yii migrate/up on test database and see if it actually creates the tables as needed. Unless I missed your question!

1 Like