2013-01-24 22 views
1

我有ZF2 RecordExists方法的問題。我會解釋我的問題情況/情況。ZF2 Db RecordExists - 檢查其他列

表:用戶 列:ID,EMAILADDRESS,websitename

Sample Records: 
     1, [email protected], 1site.com 
     2, [email protected], 1site.com 
     3, [email protected], 2site.com 
     4, [email protected], 2site.com 
     5, [email protected], 1site.com 
     6, [email protected], 3site.com 
     7, [email protected], 4site.com 

我使用下面的代碼片斷爲已經存在的條件。

//Check that the email address exists in the database 
$validator = new Zend\Validator\Db\RecordExists(
    array(
     'table' => '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"; 
    } 
} 

根據上面的代碼片段,[email protected]不能再次註冊。因爲,電子郵件地址存在於表格中。 但是,我想註冊2site.com。因爲,[email protected]位於1site.com。 因此,[email protected]不能再次註冊到1site.com。但是,[email protected]可以在2site.com上註冊。 這怎麼可能?讓我知道你的建議。

回答

1

有兩種方法可以做到這一點。

首先使用Excluding Record方法 您在哪裏排除websitename字段值的記錄。

的Zend \驗證\ DB \ RecordExists和Zend \驗證\ DB \ NoRecordExists 也,或者通過提供一個where子句作爲字符串提供以測試數據庫,但不包括 表的一部分的裝置,或帶有「字段」和「值」鍵的數組 。

$email  = '[email protected]'; 
$clause = $db->quoteInto('email = ?', $email); 
$validator = new Zend\Validator\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"; 
    } 
} 

通過編寫自己的自定義validtor二。 您需要延長AbstractDB課程並在RecordExists課程的指導下創建您自己的課程。在您自己的cust類中,您可以定義您自己的查詢並將其傳遞給isValid函數。

我已經創建了一個自定義驗證器oposite排除,這是包括。 包括保留字,現在確定它是否會工作。 check it here

這個

Guidlines 1

更多閱讀請有看看現有validtor創建自己的自定義驗證Custom validator guildline

Chain validator 2

+0

感謝。是的,我已經完成了包含方法。 – user2003356