В Yii2 миграция базы данных — это мощная функция, позволяющая разработчикам управлять изменениями схемы базы данных. Одним из распространенных сценариев является добавление внешних ключей для установления связей между таблицами. В этой статье мы рассмотрим различные методы и примеры кода для обработки миграции внешних ключей в Yii2.
-
Использование
addForeignKey()
в классе миграции:use yii\db\Migration; class m190101_000000_create_foreign_key extends Migration { public function up() { $this->addForeignKey('fk-post-user_id', 'post', 'user_id', 'user', 'id', 'CASCADE', 'CASCADE'); } public function down() { $this->dropForeignKey('fk-post-user_id', 'post'); } }
В этом примере мы создаем внешний ключ с именем
fk-post-user_id
между столбцомuser_id
таблицыpost
и столбцомuser
столбецid
таблицы. ПараметрCASCADE
гарантирует, что связанные записи будут удалены или обновлены соответствующим образом при изменении записи, на которую указывает ссылка. -
Использование
addForeignKey()
в операторе необработанного SQL:use yii\db\Migration; class m190101_000001_create_foreign_key extends Migration { public function up() { $this->db->createCommand('ALTER TABLE post ADD CONSTRAINT fk_post_user_id FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE')->execute(); } public function down() { $this->db->createCommand('ALTER TABLE post DROP CONSTRAINT fk_post_user_id')->execute(); } }
Этот подход демонстрирует использование необработанных операторов SQL для выполнения миграции внешнего ключа.
-
Использование
addForeignKey()
с построителем схем:use yii\db\Migration; class m190101_000002_create_foreign_key extends Migration { public function up() { $this->db->schema->createTable('post', [ 'id' => $this->primaryKey(), 'user_id' => $this->integer(), ]); $this->db->schema->createTable('user', [ 'id' => $this->primaryKey(), ]); $this->addForeignKey('fk-post-user_id', 'post', 'user_id', 'user', 'id', 'CASCADE', 'CASCADE'); } public function down() { $this->dropForeignKey('fk-post-user_id', 'post'); $this->db->schema->dropTable('post'); $this->db->schema->dropTable('user'); } }
В этом примере мы используем построитель схем для создания таблиц и определения внешних ключей между ними.
-
Использование
addColumn()
иaddForeignKey()
в классе миграции:use yii\db\Migration; class m190101_000003_create_foreign_key extends Migration { public function up() { $this->addColumn('post', 'user_id', $this->integer()); $this->addForeignKey('fk-post-user_id', 'post', 'user_id', 'user', 'id', 'CASCADE', 'CASCADE'); } public function down() { $this->dropForeignKey('fk-post-user_id', 'post'); $this->dropColumn('post', 'user_id'); } }
Этот подход демонстрирует добавление внешнего ключа путем сначала добавления нового столбца, а затем создания ограничения внешнего ключа.
В этой статье мы рассмотрели несколько методов обработки миграции внешних ключей в Yii2. Используя эти методы, вы можете эффективно управлять отношениями между таблицами базы данных в ваших приложениях Yii2. Понимание и реализация миграции внешних ключей имеет решающее значение для поддержания хорошо структурированной и масштабируемой схемы базы данных.
Не забудьте выполнить миграцию с помощью команды yii migrate
, чтобы применить эти изменения к вашей базе данных.