我正在建立一个供内部使用的穷人搜索引擎。当我在代码中使用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')-> ...构建。 文档完全绕过了这种构造。 谁能指出我正确的方向?
只需在查询对象上重复调用orWhere
:
$query = DB::table('books');
foreach ($columns as $column)
{
$query->orWhere($column, 'like', "%{$term}%");
}
return $query;
你最好使用 MATCH AGAINST 进行搜索。