Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
如何在查找条件CakePHP中混合AND和OR运算符_Cakephp_Cakephp 2.3 - Fatal编程技术网

如何在查找条件CakePHP中混合AND和OR运算符

如何在查找条件CakePHP中混合AND和OR运算符,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我想用CakePHP编写这个查询: SELECT * FROM pm_management.chk_master_xs_tasks where (eq_model = 'D11 R' OR eq_model = 'TODOS') AND (pm_type = 'XD' OR pm_type = 'XS'); 我尝试过几种类似的方法: $this->ChkMasterXsTask->find('all', array( 'conditions' =>

我想用CakePHP编写这个查询:

SELECT * FROM pm_management.chk_master_xs_tasks  
    where (eq_model = 'D11 R' OR eq_model = 'TODOS') AND (pm_type = 'XD' OR pm_type = 'XS');
我尝试过几种类似的方法:

$this->ChkMasterXsTask->find('all', array(
        'conditions' => array('AND' => array(
               array('OR' => array('ChkMasterXsTask.eq_model' => $eq_model,
                                   'ChkMasterXsTask.eq_model' => 'TODOS')),
               array('OR' => array('ChkMasterXsTask.pm_type' => $pm_type,
                                   'ChkMasterXsTask.pm_type' => 'XS'))
                )
            ),     
        ));
但结果并非预期。我也看到了相关的问题,但不适合我


非常感谢您的回答。

您的问题源于此代码(此问题在eq_模型中重复出现)

它尝试将两个值指定给该关联数组的同一个键。您可以将代码重写为:

array(array('ChkMasterXsTask.pm_type' => $pm_type),
      array('ChkMasterXsTask.pm_type' => 'XS'))

另一个提高可读性的选项是在函数中使用SQL的
。等价的SQL变成

SELECT * 
FROM pm_management.chk_master_xs_tasks  
WHERE eq_model IN ('D11 R', 'TODOS') 
  AND pm_type IN ('XD', 'XS');
这将使您的
查找
更容易编写:

$this->ChkMasterXsTask->find('all', array(
        'conditions' => array(
          'ChkMasterXsTask.eq_model' => array($eq_model, 'TODOS'),
          'ChkMasterXsTask.pm_type' => array($pm_type, 'XS'))
        ));

只是我在代码中看到一个错误,有一个逗号,不应该在那里

  $this->ChkMasterXsTask->find(
        'all', array(
          'conditions' => array(
            'AND' => 
               array('OR' => array(
                 array('ChkMasterXsTask.eq_model' => $eq_model),
                 array('ChkMasterXsTask.eq_model' => 'TODOS')
                 ),

                 array('OR' => 
                   array('ChkMasterXsTask.pm_type' => $pm_type),
                   array('ChkMasterXsTask.pm_type' => 'XS')
                 )
            ))     
          ));

感谢您抽出时间回答我的问题。我使用相同的键是因为我需要两个可能的值,请注意,如果
ChkMasterXsTask.pm_type
等于
$pm_type
'XS'
,我使用OR运算符来检索信息。另一方面,我将尝试您给我的选项进行测试。
函数中带有
的选项解决了我的问题。非常感谢!谢谢你回答我的问题。我删除了逗号,但结果是一样的。我认为这不是问题所在。
  $this->ChkMasterXsTask->find(
        'all', array(
          'conditions' => array(
            'AND' => 
               array('OR' => array(
                 array('ChkMasterXsTask.eq_model' => $eq_model),
                 array('ChkMasterXsTask.eq_model' => 'TODOS')
                 ),

                 array('OR' => 
                   array('ChkMasterXsTask.pm_type' => $pm_type),
                   array('ChkMasterXsTask.pm_type' => 'XS')
                 )
            ))     
          ));