У каждого пользователя уникальный логин. При обновлении записи идет проверка: Код (Text): if(!$model->validate('имя_сценария')) return $model->getErrors(); В случае успеха обновляем: Код (Text): $model->updateByPk({запись}, {параметры}) При обновлении записи возникает ошибка т.к validate говорит что логин пользователя уже существует. Пришлось сделать костыль в методе afterValidate если у обновляемого юзера логин совпадает с тем который передали, убираем ошибку.. выглядет так: Код (Text): public function afterValidate() { $model = isset($_GET['id']) ? $this->findByPk((int)$_GET['id']) : Yii::app()->user->model(); if($model) { $errors = $this->getErrors(); isset($errors['user_name']) && $this->attributes['user_name'] == $model->user_name && $this->clearErrors('user_name'); } return parent::afterValidate(); } Есть другой способ? т.к при разработке другого модуля может быть похожая задача и такое решений ой как не нравится мне... Добавлено спустя 32 минуты 6 секунд: Поставил сценарий на обновление login не уникальный, добавил проверку в метод updateByPk: Код (Text): $attributes['user_name'] = $model->user_name != $attributes['user_name'] && !$this->model()->findByAttributes(array('user_name' => $attributes['user_name'])) ? $attributes['user_name'] : $model->user_name; один фиг костыль видимо по другому никак...
Не так делаешь... Код (PHP): $user = User::model()->findByPK(....); //нашли юзера if(!$user) $user = new User(); //если нету, создали нового ... делаем проверки и присваиваем атрибуты... $user->save(); //сохраняем модель
Проще добавить валидатор на неимеющиеся в базе значения типа exist http://vinternetah.ru/yii-oshibki-reshenie/yii-sozdanie-val ... -t569.html