Чтобы проверить, если хеш уже существует и принадлежит определенному пользователю, вы можете использовать следующий валидатор с пользовательским условием исключения. Я предполагаю, что хеш - это скрытое текстовое поле, содержащее хеш из базы данных.
protected function _getEditValidator($field, $userId, $db = null)
{
if ($db == null) $db = Zend_Db_Table::getDefaultAdapter();
array(
'Db_RecordExists',
true,
array(
'table' => 'anunciantes',
'field' => $field,
'exclude' => $db->quoteInto('user_id = ?', $userId)
)
);
}
Это проверит, чтобы убедиться, что хеш, содержащийся в элементе, соответствует хешу в базе данных, которая принадлежит user_id
. Мы переопределяем опцию exclude, чтобы сделать так, чтобы значение хеша совпадало с тем, которое установлено для данного идентификатора пользователя.
Запрос должен выглядеть примерно так:
SELECT `users`.`db_hash_col` FROM `users` WHERE (`db_hash_col` = :value) AND (user_id = 1234) LIMIT 1
Вам нужно будет использовать некоторую логику, чтобы поменять валидаторы при редактировании пользователя и создании пользователя. Вы можете установить его так:
if ($editing) {
$this->getElement('hash')
->setValidators(
array($this->_getEditValidator('db_hash_col',
$this->getElement('id')->getValue());
}
Также в своем вопросе вы упомянули использование $this->getValue('id')
; Я считаю, что на самом деле это должно быть $this->getElement('id')->getValue()
.
Надеюсь, это поможет.