【发布时间】:2018-02-08 11:33:58
【问题描述】:
Laravel 5.1.11
我在店里有一个简单的搜索:
public function search($request $request)
{
return Catalog::where('title', 'like', '%'.$request->searchQuery.'%')
->orderBy('id', 'desc')
->paginate(50);
}
成功了!
但是人们正在寻找商品,所以:Pump BOSCH。搜索结果为空。
因为我改变了我的选择:
public function search($request $request)
{
$searchQ = preg_split('/\s+/', $request->searchQuery, -1, PREG_SPLIT_NO_EMPTY);
return Catalog::where(function ($q) use ($searchQ) {
foreach ($searchQ as $value) {
$q->orWhere('title', 'like', "%{$value}%");
}
})
->orderBy('id', 'desc')
->paginate(50);
}
这是有效的),并显示所有Pumps!
但我只想显示一个Pump bosch。
我的数据库表manufactories:
| id | title |
| :--: | :----- |
| 1 | AlKO |
| 2 | BOSCH |
AND catalogs,其中m_id 是来自表manufactory 的id:
| id | m_id | title | url |
| :--: | :---: | :---- | :--------- |
| 1 | 1 | pump | pump-alko |
| 2 | 2 | pump | pump-bosch |
如何更改 MySQL 搜索查询(添加 LEFT JOIN 和 CONCAT)以找到
Pump bosch? 让它看起来像这样:CONCAT('catalogs.title', ' ', 'manufactories.title') LIKE '%'.$request->searchQuery.'%'
【问题讨论】:
-
这就是简单搜索的困境——很难预测客户究竟搜索什么。如果您更改查询,然后客户查找“pump siemens”而您碰巧没有 siemens 泵,该怎么办。或者他寻找“pump Aklo”(错字)。我建议你看看 Laravel Scout 和 Algolia。这为您提供了一个非常简单易用的搜索解决方案,Algolia 可免费用于较小的数据集laravel.com/docs/5.6/scout
-
用户搜索,结果是0到n个数字,你给他们看,有什么问题?如果您有 n 个搜索结果,则显示结果
-
@mahdi-younesi 我需要在来自不同表的两个字段中进行搜索。喜欢这个
CONCAT('catalogs.title', ' ', 'manufactories.title')LIKE '%'.$request->searchQuery.'%' -
@michel-feldheim Laravel 5.1.11
标签: php mysql laravel-5 eloquent left-join