0

次のフィールドを持つusersという名前のmysqlテーブルがあります:username、password、email新しいユーザーを追加するための「user/update」と「user/update / id/{user_id}」のようなコントローラー/アクションがあります両方のコントローラーに同じZend_Formがあります。新しいユーザーを追加するために、以下のコードを使用して、ユーザー名がすでに存在するかどうかを確認しました。

$username->addValidator('Db_NoRecordExists', true, array('table' => 'user', 'field' => 'username'));

これは、新しいユーザーが追加されたときにうまく機能しますが、ユーザーを編集するときに、ユーザーがユーザー名フィールドをそのままにしておいても、ユーザー名は既に存在するというエラーが発生します。zendが提供する検証は、フィールドを編集するためのDb_NoRecordExistsと同様です。編集の場合、次のようなクエリが必要です。

SELECT COUNT(*) FROM users WHERE username='$username' AND id!=$update_id

これどうやってするの?

4

2 に答える 2

1

SQLクエリをZend_Db_Selectに変換できます

$select = Zend_Db_Table::getDefaultAdapter()->select()->from('users')->where('username =?',$username)
                                                                    ->where('id != ?',$update_id);


$validator =  new Zend_Validate_Db_NoRecordExists($select);
于 2012-07-15T03:26:24.713 に答える
0

Zend_Validate_Db_NoRecordExistsには、この場合の除外オプションがあります。

$validator = new Zend_Validate_Db_NoRecordExists(
    array(
        'table' => 'users',
        'field' => 'username',
        'exclude' => array(
            'field' => 'id',
            'value' => $user_id
        )
    )
);
于 2012-07-15T02:39:23.427 に答える