繁体   English   中英

多列多词搜索Symfony主义

[英]Multi word search on multiple columns Symfony Doctrine

我试图制作一个多字搜索,将查询表中的多个列。 到目前为止,我的代码对单个列的效果很好,但是正如您可以想象的那样,将其用于更多列会成为一个问题。

如果我添加orWhere不会起作用,并且我真的不想创建更多的for循环,因为它将变得非常麻烦。 有任何想法吗?

$query = $request->getParameter("article-search");
$keywords = explode(" ", $query);

for( $i = 1; $i <= count( $keywords ); $i++ ){
    $q->addWhere("a.title LIKE ?", "%" . $keywords[$i - 1] . "%");
}

我就是这样做的。也许对某人有帮助。

$now = "some other parameter";

$parts = explode(" ",trim($searchtext));
$clauses=array();
// static paramtter setted here
$parameters = array(
    ':now' => $now
);

$i = 0;
foreach ($parts as $part){
    // for every word make new search query and parameter
    $parameters[":param".$i] = "%".$part."%";
    if($i == 0){
        $clauses  = "v.description LIKE :param".$i." OR v.name LIKE :param".$i." OR v.sale LIKE :param".$i;
    } else {
        $clauses .= " OR v.description LIKE :param".$i." OR v.name LIKE :param".$i." OR v.sale LIKE :param".$i;
    }
    $i ++;
}

$qb->select('v')
    ->from('MyBundle\Entity\Voucher', 'v')
    ->where('v.date_start <= :now')
    ->andWhere('v.date_end >= :now')

    ->andWhere($clauses)
    ->setParameters($parameters);

通常,我会将其编写为查询,如下所示:

$query = "`where column like '%$keywordOne%' or column like '%keywordTwo%'`";

尽管我不确定您如何使用查询构建工具来实现该功能。

这是一个简单的示例,可能有助于使用您拥有的关键字数组来构建查询的where部分:

<?php
$keywords = array("bing", "bang", "jump");

$query_start = 'where colummName';
$like_portion = "like '%" . implode("%' or columnName like '%", $keywords) . "%'";

if(sizeof($keywords) > 0) {
    echo "`$query_start $like_portion`";
} else {
    // No keywords
}
?>

让我知道是否可以在这里澄清

也许您可以考虑使用“联盟”? 此外,对于此类复杂的查询,我将使用本机SQL代替ORM练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM