【问题标题】:Cakephp model find multiple 'not like'Cakephp 模型找到多个“不喜欢”
【发布时间】:2016-01-08 18:26:36
【问题描述】:

我的数据库中的 VARCHAR 字段有一个逗号分隔的标签列表。

我有一个要排除的值列表,但遇到了问题。

这就是我正在尝试的......

$result = $this->Tags->find(
  'all',
  'conditions'=>array(
      'fieldName NOT LIKE'=>'%tag1%',
      'fieldName NOT LIKE'=>'%tag2%'
  )
);

这仅适用于条件中的第一行。

也试过了……

$result = $this->Tags->find(
  'all',
  'conditions'=>array(
      'NOT'=>array(
          'fieldName LIKE'=>'%tag1%',
          'fieldName LIKE'=>'%tag2%'
      (
  )
);

我一直在查看 Cake 文档,但一直没能找到具体的内容。谢谢。

【问题讨论】:

    标签: php orm cakephp-2.0 cakephp-2.x


    【解决方案1】:

    这里有几个问题。首先,语法不正确。我认为这只是您在输入问题时犯的一个错误。

    第二个问题更难检测。如果您在数组中包含键

    'fieldName NOT LIKE' 
    

    不止一次,它会覆盖自己。

    为了防止这种情况,你必须将它包装在一个数组中:

    $result = $this->Tags->find('all',array(
        'conditions'=>array(
            array('fieldName NOT LIKE'=>'%tag1%'),
            array('fieldName NOT LIKE'=>'%tag2%')
    )));
    

    另一种选择是将查询编写如下:

    $result = $this->Tags->find('all',array(
        'conditions'=>array(
            'fieldName NOT REGEXP'=>'tag1|tag2',
    )));
    

    【讨论】:

      【解决方案2】:

      我看你的语法不正确, 也许你在'all'之后忘记了数组,

      像这样,

      $result = $this->Tags->find('all',array(
          'conditions'=> array( 'fieldName NOT LIKE' =>'%tag1%',
          'fieldName NOT LIKE'=>'%tag2%')
       ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多