OSDN Git Service

Настройка travis-CI/CD
[invent/invent.git] / migrations / m200818_123015_create_locations_table.php
1 <?php
2
3 use yii\db\Migration;
4
5 use app\models\Items;
6 /**
7  * Handles the creation of table `{{%locations}}`.
8  * Has foreign keys to the tables:
9  *
10  * - `{{%items}}`
11  * - `{{%regions}}`
12  */
13 class m200818_123015_create_locations_table extends Migration
14 {
15     public $regions   = '{{%regions}}';
16     public $locations = '{{%locations}}';
17     /**
18      * {@inheritdoc}
19      */
20     public function safeUp()
21     {
22         // Создание таблицы регионов
23         $this->createTable($regions, [
24             'id' => 'SERIAL',
25             'name' => $this->string(120)->notNull()->unique()->comment('Наименование региона (подразделения)'),
26         ]);
27
28         // Добавлнение комментариев в таблицу и поля
29         $this->addCommentOnTable( $regions, 'Регионы (подразделения)');
30         $this->addCommentOnColumn($regions, 'id', 'Идентификатор региона (неизменяемое)');
31
32         // Создание основного ключа регионов
33         $this->addPrimaryKey('pk-regions-id', $regions, 'id');
34
35         // Создание таблицы расположений
36         $this->createTable($locations, [
37             'id'        => 'SERIAL',
38             'region_id' => $this->integer()->notNull()->comment('Идентификатор региона (подразделения)'),
39             'name'      => $this->string(120)->notNull()->comment('Наименование маста размещения'),
40         ]);
41
42         // Добавлнение комментариев в таблицу и поля
43         $this->addCommentOnTable($locations,  'Места размещения оборудования');
44         $this->addCommentOnColumn($locations, 'id', 'Идентификатор места (неизменяемое)');
45
46         // Создание основного ключа
47         $this->addPrimaryKey('pk-locations-id', $locations, 'id');
48
49         // Создание индексирования для указателя региона
50         $this->createIndex('idx-locations-region_id', $locations, 'region_id');
51
52         // Создание указателя места размещения в таблице оборудования
53         $this->addColumn(Items::tableName(), 'location_id', $this->integer());
54
55         // Добавление комментария для поля места  размещения
56         $this->addCommentOnColumn(Items::tableName(), 'location_id', 'Идентификатор места размещения');
57
58         // Создание индексирования для указателя места размещения
59         $this->createIndex('idx-items-location_id', Items::tableName(), 'location_id');
60
61         // Создание связи между таблицами оборудования и размещений
62         $this->addForeignKey('fk-items-locations-id', Items::tableName(), 'location_id', $locations, 'id', 'CASCADE');
63
64         // Создание связи `{{%regions}}`
65         $this->addForeignKey('fk-locations-regions-id', $locations, 'region_id', $regions, 'id', 'CASCADE');
66     }
67
68     /**
69      * {@inheritdoc}
70      */
71     public function safeDown()
72     {
73         // Удаление связи между таблицами locations и regions
74         $this->dropForeignKey('fk-locations-regions-id', $locations);
75
76         // Удаление связи таблиц оборудования и мест размещения
77         $this->dropForeignKey('fk-items-locations-id', Items::tableName());
78
79         // Удвление индексации для идентификатора мест размещения в таблице оборудования
80         $this->dropIndex('idx-items-location_id', Items::tableName());
81
82         // Удаление идентификатора местра размещения из таблицы оборудования
83         $this->dropColumn(Items::tableName(), 'location_id');
84
85         // удаление индексации для поля регионов
86         $this->dropIndex('idx-locations-region_id', $locations);
87
88         // удаление основного ключа для таблицы мест размещения
89         $this->dropPrimaryKey('pk-locations-id', $locations);
90
91         // Удаление таблицы размещений
92         $this->dropTable($locations);
93
94         // удаление основного ключа для таблицы регионов
95         $this->dropPrimaryKey('pk-regions-id', $regions);
96
97         // Удаление таблицы регионов
98         $this->dropTable($regions);
99     }
100 }