Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用类似的贝壳连接_Php_Mysql_Laravel 5_Eloquent_Left Join - Fatal编程技术网

Php 用类似的贝壳连接

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); } 这已经成功了 但人们正在寻找这样的商品:

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)
{
    $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非常感谢你接受我的回答,兄弟。如果对你有帮助,别忘了投赞成票。