Php 用类似的贝壳连接
Laravel 5.1.11 我在我的店铺中有一个简单的搜索:Php 用类似的贝壳连接,php,mysql,laravel-5,eloquent,left-join,Php,Mysql,Laravel 5,Eloquent,Left Join,Laravel 5.1.11 我在我的店铺中有一个简单的搜索: public function search($request $request) { return Catalog::where('title', 'like', '%'.$request->searchQuery.'%') ->orderBy('id', 'desc') ->paginate(50); } 这已经成功了 但人们正在寻找这样的商品:
public function search($request $request)
{
return Catalog::where('title', 'like', '%'.$request->searchQuery.'%')
->orderBy('id', 'desc')
->paginate(50);
}
这已经成功了强>
但人们正在寻找这样的商品:泵博世
。搜索结果为空
因为我更改了我的选择:
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);
}
这已完成),并显示所有泵
强>
但我只想展示一台博世泵
我的数据库表制造厂:
| id | title |
| :--: | :----- |
| 1 | AlKO |
| 2 | BOSCH |
和目录
,其中m_id
是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',''manufactures.title')像'''.$request->searchQuery'.%'
您可以使用to-do连接,例如
DB::table('catalogs')
->select('catalogs.*')
->join('manufactories', 'catalogs.m_id', '=', 'manufactories.id', 'left')
->where(function($q) use ($searchQ) {
foreach ($searchQ as $value) {
$q->orWhere('manufactories.title', 'like', "%{$value}%");
$q->orWhere('catalogs.title', 'like', "%{$value}%");
}
})
->get();
你可以这样做
$data = DB::table('manufactories')
->join('catalogs','manufactories.id','=','catalogs.m_id')
->select('manufactories.title','catalogs.title')
->where(DB::raw('CONCAT(manufactories.title," ",catalogs.title)'), 'like',"%{$value}%")
->get();
我希望这能有所帮助,这是简单搜索的两难选择——很难预测客户到底在搜索什么。如果您更改了查询,然后客户寻找“西门子泵”,而您恰好没有西门子泵,该怎么办。或者他寻找“泵阿克洛”(打字错误)。我建议你看看拉维尔·斯考特和阿尔戈利亚。这为您提供了一个非常简单易用的搜索解决方案,Algolia对较小的数据集用户搜索是免费的,因此结果是从0到n个数字,您可以显示它们,有什么问题吗?如果您有n个搜索结果,则显示result@mahdi-younesi我需要搜索不同表中的两个字段。像这样的CONCAT('catalogs.title',''manufactures.title')
像'''.$request->searchQuery'.%'@michel feldheim Laravel 5.1.11非常感谢你接受我的回答,兄弟。如果对你有帮助,别忘了投赞成票。