9 * Handles the creation of table `{{%status}}`.
10 * Добавление таблицы состояний оборудования, и свзянного с ним поля в таблицу оборудования
12 class m200810_082546_create_status_table extends Migration
17 public function safeUp()
19 $status = Status::tableName();
20 $items = Items::tableName();
21 // Создание таблицы состояний оборудования
22 $this->createTable($status, [
24 'name' => $this->string(20)->notNull()->unique()->comment('Состояние'),
27 $this->addPrimaryKey('id_status', $status, 'id');
29 // Добавление описания таблице и колонкам
30 $this->addCommentOnTable( $status, 'Статусы состояния объектов');
31 $this->addCommentOnColumn($status, 'id', 'Номер по порядку');
33 // Создание в таблице оборудования колонки с состоянием
34 $this->addColumn($items, 'state_id', $this->integer());
35 $this->addCommentOnColumn($items, 'state_id', 'Состояние');
36 $this->createIndex('idx-items-state', $items, 'state_id');
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' => 'Списано']);
47 // Всем объектам назначим состояние 'Работает'
48 $this->update($items, [ 'state_id' => $ind ]);
50 // Создадим связь между таблицами оборудования и состояния
51 $this->addForeignKey('fk-items-status-id', $items, 'state_id', $status, 'id', 'CASCADE');
57 public function safeDown()
59 echo 'В связи с модификацией алгоритма работы программы от 17.08.2020, отмена миграции невозможна.';
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);