[英]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.