Проверка Существования Записи И Ее Извлечение.

Здравствуйте, делаю сброс пароля. Нужно проверить есть ли юзер с таким то email и если есть, выбрать его и записать ему код сброса пароля. У меня есть два решения:

№1

С помощью правил модели проверить существование юзера с таким email и в случае успеха, выбрать его из БД в контроллере и сохранить с кодом сброса.

Итог: имеем минимум 2 запроса к БД.

№2

Сделать запрос прямо в контроллере если есть запись тут же сохранить с кодом сброса, если нет, то нужно записать в модель ошибку.

Итог: имеем минимум 1 запрос к БД.

Больше склоняюсь ко второму варианту, но не уверен правильно ли делать какие бы то ни было проверки в контроллере.

Что посоветуете?

Ну во первых экономить лишний запрос к базе на редко используемом функционале сброса пароля, это наверное слишком.

Но гораздо интереснее почему в 1-м варианте у вас возникла идея

Что за модель?

Контроллер все равно ищет некую запись, если не находит (null), то или кинуть CHttpException или создать пустую модель, установить её ошибку "такого юзера нет" и отдать в представление, пусть там отображается.

А если юзер нашелся, то тогда и сброс.

В общем 2-й вариант.

Модель юзера.

Да, но все это может сделать и модель Users если прописать в ней


array('email,', 'exists', 'on'=>'resetPassword')

В этом случае меньше кода, введенные пользователем данные проверяются моделью, как и проповедуется в Yii, но больше запросов к БД.

Валидаторы нужны для проверки данных, введенные пользователями перед сохранением модели. А вам нужно проверить существует ли пользователь. В такой задаче пользоватся валидатором может и DRY но как-то странно выглядит, все равно что использовать валидатор "число должно быть больше 10" в своем коде, вместо написания простого условия if(x<10) …

Ваш 1-й вариант мне все равно очень не нравится.

Вообще наверное вам лучше написать UPDATE code=’…’ WHERE email=’…’ (не обязательно чистым SQL) и добавлять в flash ошибку “Юзер не найден” если affectedRows=0