我的用户表包含以下列和数据。
id |名字| IS_DELETED
##########################1 | dinu | 1
2 | dddd | 0
我想检查未删除的用户是否存在。我该怎么做?
我使用以下代码检查用户,并在编辑用户处输出is_deleted。现在我想用is_deleted检查用户行。我使用exclude来检查当前用户ID。
$validator = new Zend\Validator\Db\RecordExists(
array(
'table' => 'users',
'field' => 'name',
'exclude' => array(
'field' => 'id',
'value' => $id
)
)
);
if ($validator->isValid($username)) {
}
标准验证文档包含以下代码。但我无法使用它。
$email = 'user@example.com';
$clause = $db->quoteInto('email = ?', $email);
$validator = new Zend\Validator\Db\RecordExists(
array(
'table' => 'users',
'field' => 'username',
'exclude' => $clause
)
);
什么是$ db?它不是适配器。我试试看。请再帮帮我
答案 0 :(得分:5)
我认为ZF2 Validation Classes手册关于条款的部分已经过时了。
在ZF2中删除了 quoteInto()
方法
但是,我得到基于报价的Db验证过滤器才能工作..
您可以将“where”表达式用作字符串,如下所示:
$clause = "id != $myid AND status != false";
..或使用上面提到的关联数组。
然后:
'validators' => array(
array(
'name' => 'Db\NoRecordExists',
'options' => array(
'adapter' => $dbAdapter,
'table' => $tableName,
'field' => $fieldName,
'exclude' => $clause,
),
),
),
答案 1 :(得分:1)
好吧,我不知道这对ZF2是否也是如此,但是现在我只想假设是这种情况。在ZF1中,我们可以选择排除单个字段。请尝试以下方法:
$validator = new Zend\Validator\Db\RecordExists(array(
'table' => 'users',
'field' => 'name',
'exclude' => array(
'field' => 'is_deleted',
'value' => 1
)
));
这应该告诉验证者类似的东西。 Look for user with name $name but is_deleted 0
答案 2 :(得分:0)
您还可以在Zendframework 2 Include Records validator中创建自定义验证程序。 仅包括那些用于验证未删除的记录。
我创建了一个Custom Validator oposite to Exclude,包括。
<?php
//Check no other users have the username
$user_id = $user->getId();
$validator = new Zend\Validator\Db\CustomNoRecordExists(
array(
'table' => 'users',
'field' => 'username',
'include' => 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";
}
}
?>