Db_RecordExists および Db_NoRecordExists Zend_Validate_Db_RecordExists および Zend_Validate_Db_NoRecordExists は、 データベースのテーブル上に 指定した値のレコードが存在するかどうかを調べる手段を提供します。 Zend_Validate_Db_* でサポートされるオプション Zend_Validate_Db_NoRecordExists および Zend_Validate_Db_RecordExists では下記のオプションがサポートされます。 adapter: 検索で使うデータベース・アダプタ exclude: 検索から除外するレコードを設定します field: レコードに対して検索される、このテーブル内のデータベース項目 schema: 検索で使うスキーマを設定します table: レコードに対して検索されるテーブル 基本的な使用法 このバリデータの基本的な使用例です。 'users', 'field' => 'emailaddress' ) ); if ($validator->isValid($emailaddress)) { // メールアドレスは有効なようです } else { // メールアドレスが無効なので、その理由を表示します foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ]]> 上の例は、指定したメールアドレスがデータベースのテーブル内に存在するかどうかを調べます。 指定したカラムの値が $emailaddress に一致するレコードがなければ、 エラーメッセージが表示されます。 'users', 'field' => 'username' ) ); if ($validator->isValid($username)) { // ユーザ名は有効なようです } else { // ユーザ名が無効なので、その理由を表示します $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> 上の例は、指定したユーザ名がデータベースのテーブル上に存在しないことを確認します。 指定したカラムの値が $username に一致するレコードが見つかれば、 エラーメッセージが表示されます。 レコードの除外 Zend_Validate_Db_RecordExists および Zend_Validate_Db_NoRecordExists には、 テーブルの一部を除外してその内容を調べる方法があります。 where 句を文字列で指定するか、あるいはキー "field" および "value" を含む配列を指定します。 除外条件を配列で指定すると、!= 演算子を使用します。 つまり、テーブル内の残りのレコードの内容を確認してからレコードを変更できるのです (たとえばユーザ情報のフォームなどで使用します)。 getId(); $validator = new Zend_Validate_Db_NoRecordExists( array( 'table' => 'users', 'field' => 'username', 'exclude' => array( 'field' => 'id', 'value' => $user_id ) ) ); if ($validator->isValid($username)) { // ユーザ名は有効なようです } else { // ユーザ名が無効なので、その理由を表示します $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> 上の例は、id = $user_id であるレコードを除いてそのテーブル内に $username を含むレコードが存在しないことを調べます。 除外条件を文字列で指定することもできるので、 != 以外の演算子を指定することもできます。 これは、複合キーに対するチェックの際に便利です。 quoteInto('email = ?', $email); $validator = new Zend_Validate_Db_RecordExists( array( 'table' => 'users', 'field' => 'username', 'exclude' => $clause ) ); if ($validator->isValid($username)) { // ユーザ名は有効なようです } else { // ユーザ名が無効なので、その理由を表示します $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> 上の例では、ユーザ名 $username と email $email の両方を持つレコードだけが正しいことを確認するために、'users' テーブルを調べます。 データベースアダプタ アダプタを指定することもできます。 複数のデータベースアダプタを使用している場合や デフォルトのアダプタを設定していない場合などにこれを使用します。 以下に例を示します。 'users', 'field' => 'id', 'adapter' => $dbAdapter ) ); ]]> データベーススキーマ データベース内のスキーマを PostgreSQL や DB/2 のアダプタで指定するには、キー table および schema を持つ配列を次の例のように渡します。 below: 'users', 'schema' => 'my', 'field' => 'id' ) ); ]]>