php - Laravel Eloquent/SQL - 在数据库中搜索关键字

标签 php mysql sql laravel eloquent

我目前正在尝试在我的数据库中实现关键字/标签的搜索。

在我的数据库中,我有一些带有关键字的行,例如: auto,cabrio,frischluft或者 hose,jeans,blaue hose,kleidung

所以总是有一些关键字(基本上也可以有空格),用逗号分隔( , )。

现在我希望能够在我的数据库中找到输入了一些关键字的产品。

LIKE我可以通过类似 auto,cabrio 的查询找到我提到的两个条目或者也cabrio,frischlufthose,jeans,blauhose,kleidung 。但是如果我输入 auto,frischluft 会发生什么?或类似hose,blaue hosejeans,kleidung

然后LIKE不再工作了。有没有办法做到这一点?

我希望你明白我的意思...

所以为了清楚起见:我当前使用的代码是: $searchQuery = "%".$request->input('productSearch')."%"; $products = Product::where('name', 'LIKE', $searchQuery)->paginate(15);

但正如我所说,这不会让我返回带有关键字 auto,cabrio,frischluft 的文章如果输入productSearch有关键字auto,frischluft输入...

有什么想法吗?

最佳答案

抱歉,我知道我参加聚会迟到了,但这是我在寻找 Eloquent 关键字搜索时 Google 中的第一个结果。我遇到了同样的问题,我想帮助解决我的问题。

$q = $request->input('productSearch');
$needles = explode(',', $q);

// In my case, I wanted to split the string when a comma or a whitespace is found:
// $needles = preg_split('/[\s,]+/', $q);

$products = Products::where('name', 'LIKE', "%{$q}%");

foreach ($needles as $needle) {
    $products = $products->orWhere('name', 'LIKE', "%{$needle}%");
}

$products = $products->paginate(15);

如果用户输入的逗号太多,则 $needles 数组可能太大(并且查询太大),因此您可以限制搜索,例如,仅搜索前 5 个数组中的元素:

$needles = array_slice($needles, 0, 5);

我希望这可以帮助别人。

关于php - Laravel Eloquent/SQL - 在数据库中搜索关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052914/

相关文章:

php - 使用列和行索引设置单元格背景

Mysql:如何为排名列表选择最近 24 小时的前 10 名用户(并避免多个用户条目)

python - 如何优化这个 MySQL 计数算法?

sql - 声明 myvar int(11);在 mysql 例程中返回语法错误

mysql - 如何从MySQL中获取最新的记录?

php - Laravel Elasticsearch 不给出包含或喜欢的匹配

php - 使用 simplexml 将 XML 导入 MySQL

php - WordPress 导航。只显示子菜单 li

mysql - 如何使用 SQL-GROUP BY 查找重复行

mysql表名长度限制? - 请测试默认的 mysql(2010 年询问 mysql <5.5)