0

我的用户表有以下列和数据。

编号 | 姓名 | is_deleted

##########################

1 | 迪努 | 1

2 | dddd | 0

我想检查未删除的用户是否存在。我该怎么做?

我在编辑用户时使用以下代码检查没有 is_deleted 的用户。现在我想用 is_deleted 检查用户行。我使用排除来检查当前用户 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 ?它不是适配器。我试试看。请再次帮助我。

4

3 回答 3

5

我认为 ZF2 Validation Classes 手册中关于条款的部分已经过时了。

quoteInto()ZF2 中删除了方法

但是,我得到了基于报价的 Db 验证过滤器工作..

您可以使用“where”表达式作为字符串,如下所示:

$clause = "id != $myid AND status != false";

..或使用上面提到的关联数组。

接着:

        'validators' => array(
            array(
                'name'    => 'Db\NoRecordExists',
                'options' => array(
                    'adapter' => $dbAdapter,
                    'table' => $tableName,
                    'field' => $fieldName,
                    'exclude' => $clause,
                ),
            ),
        ),
于 2013-02-15T14:35:16.860 回答
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

于 2012-09-21T14:47:26.120 回答
0

您还可以在 Zendframework 2 Include Records validator中创建自定义验证器。只包括那些记录以验证哪些未被删除。

我创建了一个与排除相反的自定义验证器,它是包含。

<?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";

}

}



?>
于 2013-01-25T16:17:10.243 回答