OSDN Git Service

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