首页 > 解决方案 > 在 Laravel 中搜索

问题描述

我有以下查询

$objects = Object::where('user_id', auth()->user()->id)
                ->where('object_name','LIKE','%'.$request->search."%")
                ->get();

这将返回包含关键字的当前用户的所有对象。这仅搜索object_name列中的关键字。

因为我想在两者中搜索object_nameand object_description,所以我添加了一个orWhere子句,如下所示:

 $objects = Object::where('user_id', auth()->user()->id)
            ->where('object_name','LIKE','%'.$request->search."%")
            ->orWhere('object_description','LIKE','%'.$request->search."%")
            ->get();

现在这将返回包含关键字 in 的所有对象object_nameobject_description但它会在整个用户群中进行搜索。

我想要的是更改此查询,以便我可以在object_nameor中搜索关键字object_description,但搜索范围必须限于当前登录的用户。

标签: laraveleloquent

解决方案


您应该像这样更改您的查询

$search = $request->search;
$objects = Object::where('user_id', auth()->user()->id)
    ->where(function($query) use ($search) {
         $query->where('object_name','LIKE',"%{$search}%")
             ->orWhere('object_description','LIKE',"%{$search}%");
      })
    ->get();

推荐阅读