OSDN Git Service

Модификация импорта
[invent/invent.git] / migrations / m200818_045741_create_types_table.php
1 <?php
2
3 use yii\db\Migration;
4
5 use app\models\Items;
6 use app\models\Types;
7 /**
8  * Handles the creation of table `{{%types}}`.
9  * Добавление таблицы типов оборудования и свзянного с нею поля в таблице оборудования
10  */
11 class m200818_045741_create_types_table extends Migration
12 {
13     /**
14      * {@inheritdoc}
15      */
16     public function safeUp()
17     {
18         $types = Types::tableName();
19         $items = Items::tableName();
20         // Создание таблицы типов
21         $this->createTable($types, [
22             'id'   => 'SERIAL',
23             'name' => $this->string(20)->comment('Тип оборудования'),
24         ]);
25         // Добавление основного ключа
26         $this->addPrimaryKey('id-types', $types, 'id');
27         
28         // Добавление комментария для описания таблицы
29         $this->addCommentOnTable( $types, 'Типы оборудования');
30         $this->addCommentOnColumn($types, 'id', 'Идентификатор типа (неизменяемое)');
31         
32         // Добавление поля типа оборудования в таблицу оборудования
33         $this->addColumn($items, 'type_id', $this->integer());
34         $this->addCommentOnColumn($items, 'type_id', 'Тип оборудования');
35         $this->createIndex('idx-items-types', $items, 'type_id');
36         
37         // Добавление связи полей таблиц types и items
38         $this->addForeignKey('fk-items-types-id', $items, 'type_id', $types, 'id', 'CASCADE');
39         
40         // Добавление базовых типов
41         $this->insert($types, ['name' => 'Компьютер']);
42         $typeId = Yii::$app->db->getlastInsertID(); // Запомним идентификатор типа 'Компьютер'
43         $this->insert($types, ['name' => 'Принтер']);
44         $this->insert($types, ['name' => 'МФУ']);
45         $this->insert($types, ['name' => 'Сканер']);
46         $this->insert($types, ['name' => 'ИБП']);
47         $this->insert($types, ['name' => 'Свич/коммутатор']);
48         $this->insert($types, ['name' => 'Модем']);
49         $this->insert($types, ['name' => 'Монитор']);
50         $this->update($items, ['type_id' => $typeId ]);
51     }
52
53     /**
54      * {@inheritdoc}
55      */
56     public function safeDown()
57     {
58         echo 'Отменить миграцию невозможно из-за внесённых данных';
59         return false;
60
61         $types = Types::tableName();
62         $items = Items::tableName();
63         // Удаление связи таблиц оборудования и типов
64         $this->dropForeignKey('fk-items-types-id', $items);
65         // Удаление индекса поля типов в таблице оборудования
66         $this->dropIndex('idx-items-types', $items);
67         // Удаление поля типов в таблице оборудования
68         $this->dropColumn($items, 'type_id');
69         // Удаление основного ключа в таблице типов
70         $this->dropPrimaryKey('id-types', $types);
71         // Удаление таблицы типов
72         $this->dropTable($types);
73     }
74 }