WHERE子句中的多个OR项

时间:2014-11-18 21:39:34

标签: php laravel query-builder

我正在建立一个穷人的内部搜索引擎。回到我在代码中使用MySQLi或pgsql db这样做的时候,我会写下这样的内容:

$sql = "SELECT * FROM $table ";
$WC = array();
foreach($columns as $col )
{
  $WC[] = $col ." like '%".$term."%'";
}
$sql .= ' WHERE ('. implode(') OR (', $WC). ')';

return $sql;

它会将一些(未知的)列名与搜索词连接起来。生成的SQL看起来有点像这样:

SELECT * FROM books WHERE (title like '%kids%') OR (publisher like '%kids%') OR (author like '%kids%');

相当粗糙但有效到一定程度。拥有一个小而众所周知的数据集可以使这种事情非常有用。

...然而

我不能为我的生活弄清楚如何将任意数量的OR子句附加到DB :: table(' books') - > ...构造。文档完全围绕这种结构。谁能指出我正确的方向?

2 个答案:

答案 0 :(得分:1)

只需在查询对象上反复调用orWhere

$query = DB::table('books');

foreach ($columns as $column)
{
    $query->orWhere($column, 'like', "%{$term}%");
}

return $query;

答案 1 :(得分:0)

您最好使用MATCH AGAINST进行搜索。