[ 'type' => 'VARCHAR', 'constraint' => 64, 'null' => true, 'after' => 'role', 'comment' => 'Токен для принятия приглашения', ], 'invited_by' => [ 'type' => 'INT', 'unsigned' => true, 'null' => true, 'after' => 'invite_token', 'comment' => 'ID пользователя, который отправил приглашение', ], 'invited_at' => [ 'type' => 'DATETIME', 'null' => true, 'after' => 'invited_by', 'comment' => 'Дата отправки приглашения', ], 'status' => [ 'type' => 'ENUM', 'values' => ['active', 'pending', 'blocked'], 'default' => 'pending', 'after' => 'invited_at', 'comment' => 'Статус участия в организации', ], ]; $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN status ENUM('active', 'pending', 'blocked') DEFAULT 'pending' AFTER invited_at"); $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invite_token VARCHAR(64) NULL AFTER role"); $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_by INT UNSIGNED NULL AFTER invite_token"); $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_at DATETIME NULL AFTER invited_by"); // Индекс для быстрого поиска по токену $this->db->simpleQuery("CREATE INDEX idx_org_users_token ON organization_users(invite_token)"); } public function down() { // Удаление полей и индекса при откате миграции $this->db->simpleQuery("DROP INDEX idx_org_users_token ON organization_users"); $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_at"); $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_by"); $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invite_token"); $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN status"); } }