Что вы пытаетесь сделать именно? Мне даже не нужен специальный валидатор.
Если вы внимательно прочитаете исходный код Zend_Validate_Db_Abstract
, вы заметите этот phpDoc над конструктором:
Предоставляет базовую конфигурацию для использования с валидаторами Zend_Validate_Db.
Установка $ exclude позволяет исключить одну запись из соответствия.
Исключением может быть либо строка, содержащая предложение where, либо массив с ключами field
и value
определить предложение where, добавленное в sql.
При желании может быть предоставлен адаптер базы данных, чтобы избежать использования зарегистрированного адаптера по умолчанию.
Поддерживаются следующие функциональные клавиши:
- 'table' => Таблица базы данных для проверки по
- 'схема' => Ключи схемы
- 'field' => Поле для проверки на совпадение
- 'exclude' => Необязательная пара операторов where или field / value для исключения из запроса
- 'adapter' => Дополнительный адаптер базы данных для использования
Это означает, что если вы хотите проверить, существует ли запись, используя более чем одно значение, вы можете сделать это просто в , передав предложение where в валидатор вместо поля / значения пары:
$where = 'user_id != 110 AND email != "email@example.com"';
$where = array('users', 'email', $where);
$element->addValidator('db_NoRecordExists', true, $where)
Это в основном проверит, существует ли запись в таблице users , и исключит строки, в которых id пользователя! = 110 или email@example.com. Естественно, я рекомендую вам использовать методы Zend_Db , такие как quoteIdentifier()
, для генерации полностью экранированного выражения запроса.
Конечно, вы можете добавить столько полей, сколько хотите.
Более подробную информацию о Db_NoRecordExists
можно найти в документации .