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.
Utilisation de base
Voici un exemple basique:
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.
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(
'users',
'username',
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 qu'aucun utilisateur dont l'id n'est pas celui spécifié,
possède ce nom là $username.
La clause d'exclusion peut aussi être renseignée avec une chaine afin de pouvoir utiliser
un opérateur autre que !=.
getId();
$clause = $db->quoteInto('post_id = ?', $category_id);
$validator = new Zend_Validate_Db_RecordExists(
'posts_categories',
'post_id',
$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 posts_categories pour s'assurer
qu'un enregistrement avec post_id corresponde à $category_id
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:
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'), 'id');
]]>