OSDN Git Service

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