OSDN Git Service

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