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'
)
);
]]>