Cakephp模型发现多个'不喜欢'

时间:2016-01-08 18:26:36

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

我的数据库中的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文档,但一直未能找到它。感谢。

2 个答案:

答案 0 :(得分: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',
)));

答案 1 :(得分:0)

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

像这样,

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