Db_RecordExists et Db_NoRecordExists Zend_Validate_Db_RecordExists et Zend_Validate_Db_NoRecordExists permettent de vérifier si un enregistrement existe (ou pas) dans une table de base de données. Options supportées par Zend_Validate_Db_* Les options suivantes sont supportées par Zend_Validate_Db_NoRecordExists et Zend_Validate_Db_RecordExists : adapter : l'adaptateur de base de données qui sera utilisé pour la recherche. exclude : jeu d'enregistrements qui seront exclus de la recherche. field : le champs dans la table de la base de données dans lequel sera effectué la recherche. schema : le schéma utilisé pour la recherche. table : la table qui sera utilisée pour la recherche. Utilisation de base Voici un exemple basique: 'users', 'field' => 'emailaddress' ) ); if ($validator->isValid($emailaddress)) { // l'adresse email existe } else { // l'adresse email n'existe pas, affichons les messages d'erreur foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ]]> Le code ci-dessus vérifie la présence d'une adresse email $emailaddress vis à vis d'un champ d'une table de base de données. 'users', 'field' => 'username' ) ); if ($validator->isValid($username)) { // Le nom d'utilisateur semble absent de la table } else { // invalide : l'utilisateur est probablement présent dans la table $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> Le code ci-dessus vérifie l'absence d'un nom d'utilisateur $username vis à vis d'un champ d'une table de base de données. Exclure des enregistrement Zend_Validate_Db_RecordExists et Zend_Validate_Db_NoRecordExists proposent aussi un moyen de tester la base de données en excluant certaines parties de table, en passant une clause where ou un tableau de paires "champs" "valeur". Lorsqu'un tableau est passé, l'opérateur != est utilisé et vous pouvez ainsi tester le reste de la table. getId(); $validator = new Zend_Validate_Db_NoRecordExists( array( 'table' => 'users', 'field' => 'username', 'exclude' => array( 'field' => 'id', 'value' => $user_id ) ) ); if ($validator->isValid($username)) { // OK } else { // KO $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> L'exemple ci dessus va vérifier dans la table qu'aucun autre enregistrement que celui pour lequel id = $user_id ne contient la valeur $username. La clause d'exclusion peut aussi être renseignée avec une chaine afin de pouvoir utiliser un opérateur autre que !=. quoteInto('email = ?', $email); $validator = new Zend_Validate_Db_RecordExists( array( 'table' => 'users', 'field' => 'username', 'exclude' => $clause ) ); if ($validator->isValid($username)) { // OK } else { // KO $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> L'exemple ci-dessus vérifie la table 'users' pour s'assurer qu'un seul enregistrement avec un nom $username et un email $email est valide. Adaptateurs de base de données Un adaptateur spécifique peut être passé au validateur. Dans le cas contraire, il utilisera l'adaptateur déclaré comme étant celui par défaut: 'users', 'field' => 'id', 'adapter' => $dbAdapter ) ); ]]> Nom des bases de données Vous pouvez spécifier un nom de base de données (schéma) pour l'adaptateur PostgreSQL et DB/2 simplement grâce à un tableau possédant les clés table et schema. Voici un exemple : 'users', 'schema' => 'my', 'field' => 'id' ) ); ]]>