db->getFieldData('organization_users'); $existingFields = array_column($fields, 'name'); if (!in_array('invite_token', $existingFields)) { $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invite_token VARCHAR(64) NULL AFTER role"); } if (!in_array('invited_by', $existingFields)) { $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_by INT UNSIGNED NULL AFTER invite_token"); } if (!in_array('invited_at', $existingFields)) { $this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_at DATETIME NULL AFTER invited_by"); } // Индекс для быстрого поиену (еска по токсли ещё нет) $indexes = $this->db->getIndexData('organization_users'); $hasTokenIndex = false; foreach ($indexes as $index) { if ($index->name === 'idx_org_users_token') { $hasTokenIndex = true; break; } } if (!$hasTokenIndex) { $this->db->simpleQuery("CREATE INDEX idx_org_users_token ON organization_users(invite_token)"); } // Изменяем поле status, чтобы включить 'pending' и установить его как значение по умолчанию // Используем прямой SQL для модификации ENUM $this->db->simpleQuery("ALTER TABLE organization_users MODIFY COLUMN status ENUM('active', 'pending', 'invited', 'blocked') NOT NULL DEFAULT 'pending'"); } public function down() { // Удаление полей и индекса при откате миграции $fields = $this->db->getFieldData('organization_users'); $existingFields = array_column($fields, 'name'); // Удаляем только если поля существуют $this->db->simpleQuery("DROP INDEX IF EXISTS idx_org_users_token ON organization_users"); if (in_array('invited_at', $existingFields)) { $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_at"); } if (in_array('invited_by', $existingFields)) { $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_by"); } if (in_array('invite_token', $existingFields)) { $this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invite_token"); } } }