Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend db\n存在多个排除选项问题_Php_Forms_Zend Framework_Zend Db_Zend Validate - Fatal编程技术网

Php Zend db\n存在多个排除选项问题

Php Zend db\n存在多个排除选项问题,php,forms,zend-framework,zend-db,zend-validate,Php,Forms,Zend Framework,Zend Db,Zend Validate,我在控制器中添加了代码,以检查记录是否已经存在 public function addAction() { $form = new Form(); $request = $this->getRequest(); if ($request->isPost()) { $role = new Role($this->dbAdapter); $form->setInputFilter($role->getInputF

我在控制器中添加了代码,以检查记录是否已经存在

public function addAction()
{
    $form = new Form();

    $request = $this->getRequest();
    if ($request->isPost()) {
        $role = new Role($this->dbAdapter);
        $form->setInputFilter($role->getInputFilter());
        $form->setData($request->getPost());

        // start here for add validator for already exists same data as entered.
            $db = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
            $validator = new \Zend\Validator\Db\NoRecordExists(
                array(
                    'table'   => 'tbl_roles',
                    'field'   => 'vRoleName',
                    'exclude' => array(
                      'field' => 'iRoleID',
                      'value' => $request->getPost('iRoleID') // note 1
                  ),
                  'adapter' => $db,
                    'messages' => array(
                        \Zend\Validator\Db\NoRecordExists::ERROR_RECORD_FOUND => 'This  Role is already exist.',
                    ),
                )
            );
            $form->getInputFilter()->get('vRoleName')->getValidatorChain()->addValidator($validator);
            // end here for add validator for already exists same data as entered.

        if ($form->isValid()) {
            $role->exchangeArray($form->getData());
            $this->aclRoleTable->saveRole($role);
            $this->flashMessenger()->addMessage('Role Added Successfully.');
            return $this->redirect()->toRoute('role');
        }
    }
  return array('form' => $form);
}
注1:我必须在这里添加第二个要排除的字段,如eDelete=“1”,因此如果存在eDelete=“1”的记录,那么我也可以在数据库中添加相同的角色名称。
或者给我一个解决方案,如果eDelete=1的记录存在,那么就不显示zend error,我可以将它从eDelete=1更新为0。

根据类的zend代码zend\u Validate\u Db\u Abstract的父类zend\u Validate\u Db\u NoRecordExists,可以使用字符串/数组作为“exclude”属性

/*'exclude'=>要从查询中排除的可选where子句或字段/值对

所以你可以试试

'exclude' => 'iRoldId = ' . $request->getPost('iRoleID') . ' AND eDelete = "1"'

Zend将给出结果
true

以下是您可以根据以下内容执行的操作:

getInputFilter()
Model函数中:

$select = new \Zend\Db\Sql\Select();
$select->from('clientes')
    ->where(array(
        'iRoldId' => $request->getPost('iRoleID'),
        'eDelete' => '1',
    )); 

$inputFilter->add($factory->createInput(array(
    'name'     => 'yourfieldname',
    'validators' => array(
        array( 
            'name'    => 'Db\NoRecordExists',
            'options' => array( 
                'table'     => 'yourtablename', 
                'field'     => 'yourfieldname', 
                'adapter' => 'youradapter',
                //Here comes the magic
                'select' => $select,
            ), 
        ), 
    ),
)));