Db_RecordExists and Db_NoRecordExists
Zend_Validate_Db_RecordExists and
Zend_Validate_Db_NoRecordExists provide a means to test
whether a record exists in a given table of a database, with a given
value.
Supported options for Zend_Validate_Db_*
The following options are supported for
Zend_Validate_Db_NoRecordExists and
Zend_Validate_Db_RecordExists:
adapter: The database adapter which
will be used for the search.
exclude: Sets records which will be
excluded from the search.
field: The database field within this
table which will be searched for the record.
schema: Sets the schema which will be
used for the search.
table: The table which will be
searched for the record.
Basic usage
An example of basic usage of the validators:
'users',
'field' => 'emailaddress'
)
);
if ($validator->isValid($emailaddress)) {
// email address appears to be valid
} else {
// email address is invalid; print the reasons
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
]]>
The above will test that a given email address is in the database
table. If no record is found containing the value of
$emailaddress in the specified column, then an error
message is displayed.
'users',
'field' => 'username'
)
);
if ($validator->isValid($username)) {
// username appears to be valid
} else {
// username is invalid; print the reason
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
]]>
The above will test that a given username is not in the database
table. If a record is found containing the value of
$username in the specified column, then an error
message is displayed.
Excluding records
Zend_Validate_Db_RecordExists and
Zend_Validate_Db_NoRecordExists also provide a means
to test the database, excluding a part of the table, either by
providing a where clause as a string, or an array with the keys
"field" and "value".
When providing an array for the exclude clause, the !=
operator is used, so you can check the rest of a table for a value
before altering a record (for example on a user profile form)
getId();
$validator = new Zend_Validate_Db_NoRecordExists(
array(
'table' => 'users',
'field' => 'username',
'exclude' => array(
'field' => 'id',
'value' => $user_id
)
)
);
if ($validator->isValid($username)) {
// username appears to be valid
} else {
// username is invalid; print the reason
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
]]>
The above example will check the table to ensure no records other
than the one where id = $user_id contains the value
$username.
You can also provide a string to the exclude clause so you can use
an operator other than !=. This can be useful for
testing against composite keys.
quoteInto('email = ?', $email);
$validator = new Zend_Validate_Db_RecordExists(
array(
'table' => 'users',
'field' => 'username',
'exclude' => $clause
)
);
if ($validator->isValid($username)) {
// username appears to be valid
} else {
// username is invalid; print the reason
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
]]>
The above example will check the 'users' table
to ensure that only a record with both the username
$username and with the email
$email is valid.
Database Adapters
You can also specify an adapter. This will allow you to work with
applications using multiple database adapters, or where you have not
set a default adapter. As in the example below:
'users',
'field' => 'id',
'adapter' => $dbAdapter
)
);
]]>
Database Schemas
You can specify a schema within your database for adapters such as
PostgreSQL and DB/2 by simply supplying an array with
table and schema keys. As in the example
below:
'users',
'schema' => 'my',
'field' => 'id'
)
);
]]>