6 use app\models\Locations;
7 use app\models\Regions;
10 * Handles the creation of table `{{%locations}}`.
11 * Has foreign keys to the tables:
16 class m200818_123015_create_locations_table extends Migration
21 public function safeUp()
23 $regions = Regions::tableName();
24 $locations = Locations::tableName();
25 $items = Items::tableName();
26 // Создание таблицы регионов
27 $this->createTable($regions, [
29 'name' => $this->string(120)->notNull()->unique()->comment('Наименование региона (подразделения)'),
32 // Добавлнение комментариев в таблицу и поля
33 $this->addCommentOnTable( $regions, 'Регионы (подразделения)');
34 $this->addCommentOnColumn($regions, 'id', 'Идентификатор региона (неизменяемое)');
36 // Создание основного ключа регионов
37 $this->addPrimaryKey('pk-regions-id', $regions, 'id');
39 // Создание таблицы расположений
40 $this->createTable($locations, [
42 'region_id' => $this->integer()->notNull()->comment('Идентификатор региона (подразделения)'),
43 'name' => $this->string(120)->notNull()->comment('Наименование маста размещения'),
46 // Добавлнение комментариев в таблицу и поля
47 $this->addCommentOnTable($locations, 'Места размещения оборудования');
48 $this->addCommentOnColumn($locations, 'id', 'Идентификатор места (неизменяемое)');
50 // Создание основного ключа
51 $this->addPrimaryKey('pk-locations-id', $locations, 'id');
53 // Создание индексирования для указателя региона
54 $this->createIndex('idx-locations-region_id', $locations, 'region_id');
56 // Создание указателя места размещения в таблице оборудования
57 $this->addColumn($items, 'location_id', $this->integer());
59 // Добавление комментария для поля места размещения
60 $this->addCommentOnColumn($items, 'location_id', 'Идентификатор места размещения');
62 // Создание индексирования для указателя места размещения
63 $this->createIndex('idx-items-location_id', $items, 'location_id');
65 // Создание связи между таблицами оборудования и размещений
66 $this->addForeignKey('fk-items-locations-id', $items, 'location_id', $locations, 'id', 'CASCADE');
68 // Создание связи `{{%regions}}`
69 $this->addForeignKey('fk-locations-regions-id', $locations, 'region_id', $regions, 'id', 'CASCADE');
70 $this->insert($regions, [ 'name' => 'Одинцовская ветеринарная станция' ]);
71 $regionId = Yii::$app->db->getlastInsertID();
72 $this->insert($locations, [ 'region_id' => $regionId, 'name' => 'Матвейково' ]);
73 $locationId = Yii::$app->db->getlastInsertID();
74 $this->update($items, [ 'location_id' => $locationId ]);
80 public function safeDown()
82 $regions = Regions::tableName();
83 $locations = Locations::tableName();
84 $items = Items::tableName();
85 // Удаление связи между таблицами locations и regions
86 $this->dropForeignKey('fk-locations-regions-id', $locations);
88 // Удаление связи таблиц оборудования и мест размещения
89 $this->dropForeignKey('fk-items-locations-id', $items);
91 // Удвление индексации для идентификатора мест размещения в таблице оборудования
92 $this->dropIndex('idx-items-location_id', $items);
94 // Удаление идентификатора местра размещения из таблицы оборудования
95 $this->dropColumn($items, 'location_id');
97 // удаление индексации для поля регионов
98 $this->dropIndex('idx-locations-region_id', $locations);
100 // удаление основного ключа для таблицы мест размещения
101 $this->dropPrimaryKey('pk-locations-id', $locations);
103 // Удаление таблицы размещений
104 $this->dropTable($locations);
106 // удаление основного ключа для таблицы регионов
107 $this->dropPrimaryKey('pk-regions-id', $regions);
109 // Удаление таблицы регионов
110 $this->dropTable($regions);