6 * Handles the creation of table `{{%status}}`.
7 * Добавление таблицы состояний оборудования, и свзянного с ним поля в таблицу оборудования
9 class m200810_082546_create_status_table extends Migration
14 public function safeUp()
16 // Создание таблицы состояний оборудования
17 $this->createTable('{{%status}}', [
18 'id' => $this->primaryKey(),
20 'name' => $this->string(20)->notNull()->unique(),
23 $this->addPrimaryKey('id_status', '{{%status}}', 'id');
25 // Добавление описания таблице и колонкам
26 $this->addCommentOnTable('{{%status}}', 'Статусы состояния объектов');
27 $this->addCommentOnColumn('{{%status}}', 'id', 'Номер по порядку');
28 $this->addCommentOnColumn('{{%status}}', 'name', 'Состояние');
30 // Создание в таблице оборудования колонки с состоянием
31 $this->addColumn('{{%items}}', 'state_id', $this->integer());
32 $this->addCommentOnColumn('{{%items}}', 'state_id', 'Состояние');
33 $this->createIndex('idx-items-state', '{{%items}}', 'state_id');
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' => 'Списано']);
44 // Всем объектам назначим состояние 'Работает'
45 $this->update('{{%items}}', [ 'state_id' => $ind ]);
47 // Создадим связь между таблицами оборудования и состояния
48 $this->addForeignKey('fk-items-status-id', '{{%items}}', 'state_id', '{{%status}}', 'id', 'CASCADE');
54 public function safeDown()
56 echo 'В связи с модификацией алгоритма работы программы от 17.08.2020, отмена миграции невозможна.'
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}}');