CakePHP使用%with%with

时间:2016-08-03 22:46:23

标签: mysql cakephp

我正在尝试根据类别ID或子类别名称查询页面。

变量$ cat将从我的数据库中获取一个整数或varchar。

我一直在使用带有sql的cakephp 1.3找到所有类别为$ cat或子类别LIKE $ cat的文章

效果很好但是当$ cat在单词之间留有空格时会出现问题,“Google表单”。

我浏览了这个网站并尝试了一些没有运气的方法。感谢任何建议。

这是我的控制器例程:

$cat = Sanitize::escape($cat);
$cat = trim($cat);
$title_a = str_replace($cat, "%".$cat."%", $cat);
$a_t = str_replace('"', $title_a, $title_a);
//var_dump($cat);

if(!empty($cat))
{
$sqlConditions = array('OR'=>array('Article.categories LIKE' => $a_t, 'Article.event_category_id' => $cat));
$sqlParams = array('conditions'=>$sqlConditions);
$catdata=$this->Article->find('all',$sqlParams);
return $catdata;
}

我尝试过很多不同的选择:

  1. RLIKE而不是LIKE

  2. 使用MATCH的不同查询

    $ sqlConditions = array(             'OR'=>阵列(             'MATCH(Article.categories AGAINST(?在BOOLEAN MODE中)'=> $ cat,             'MATCH(Article.event_category_id)反对(?在布尔模式中)'=> $猫             )             );

  3. $ sqlConditions = array('OR'=> array('Article.categories LIKE'=>“%”。$ cat。“%”,'Article.event_category_id'=> $ cat) );

1 个答案:

答案 0 :(得分:0)

我认为一个不错的解决方案是删除所有空格并使$cat小写的字符。

$likeCat = strtolower(str_replace(' ', '', trim($cat)));
$sqlConditions = array(
    'OR'=> array(
        'LOWER(REPLACE(Article.categories, ' ', ''))' => $likeCat,
        'Article.event_category_id' => $cat
    )
);