簡體   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