CakePHP:" IN" -operator对单值和多值的工作方式不同

时间:2015-11-02 11:07:40

标签: cakephp in-operator

我正在使用此查询来获取匹配结果:

$result = $this->Customer->CustomersC->find('list', array(
  'conditions' => array('CustomersC.company_id IN' => $companyIds),
  'fields' => array('CustomersC.customer_id'),
));

如果$companyIds有多个值,则查询效果很好。这里的查询打印在日志中:

  

SELECT CustomersCcustomer_id FROM projectcustomers_companies AS CustomersC WHERE CustomersCcompany_id IN(7,8 ,9,11,15)

但是,如果$companyIds只有一个值,则会抛出SQL异常。这是查询:

  

SELECT CustomersCcustomer_id FROM projectcustomers_companies AS CustomersC WHERE CustomersCcompany_id IN =(&# 39; 7&#39)

请注意在 IN 之后添加了不必要的=(equalTo运算符)。

有人能指出我正确的方向处理这种情况吗?

1 个答案:

答案 0 :(得分:2)

您无需在条件中指定IN。您只需要执行以下操作: -

$result = $this->Customer->CustomersC->find('list', array(
    'conditions' => array('CustomersC.company_id' => $companyIds),
    'fields' => array('CustomersC.customer_id'),
));

CakePHP将根据条件的值确定您的意思是=还是IN。如果您传递数组,它会将条件视为IN。在您的情况下,它使用=,但您的条件密钥中有IN,导致IN =错误。