记录存在于zf2 with子句中

时间:2012-09-21 12:47:52

标签: php database zend-framework2 validation

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

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?它不是适配器。我试试看。请再帮帮我

3 个答案:

答案 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";

}

}



?>