【发布时间】:2016-05-23 00:45:30
【问题描述】:
我正在尝试制作一个多词搜索,它将查询表中的多个列。到目前为止,我的代码在单列上运行良好,但正如您可以想象的那样,将它用于多列会成为问题。
如果我添加 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] . "%");
}
【问题讨论】:
-
我在过去作为一个我重用的类做过类似的事情。它太大了,无法在这里发布,但我会解释一下。开始只构建一个“字符串”变量,不要尝试使用 Database Merhods 构建。您将有几个循环需要解决。首先,在跨多个列进行搜索时,您将在它们之间添加带有“OR”的 LIKE。有的话,你会分裂;建议使用 preg_split() 进行更多控制。对于每个单词,您都需要限制搜索,因此在它们之间使用“AND”。请记住,您可能还有多个参数/条件甚至类型(字符串、整数、日期)。
标签: php mysql doctrine symfony1