使用 Laravel 实现搜索功能时出现问题

Issue with implementing a search functionality with Laravel

我正在尝试在站点中实现搜索功能。用户可以指定可以匹配 product_id、product_name 或 product_sku 的搜索字符串。我想要实现的是一个搜索功能,它将 return 所有匹配项。

到目前为止我得到了什么:

 return Product::with(['getProductItem' => fn ($query) => $query->orWhere('itemSkuNumber', '=', $request->search)])
                ->where(
                    'name',
                    $request->has('match') ? '=' : 'like',
                    $request->has('match') ? $request->search : '%' . $request->search . '%'
                )
                ->orWhere('id', '=', $request->search)->get();

如果我指定 product_id 或 product_name 这会起作用,但如果我提供 sku 则不会 return 任何东西。

您应该将 orWheres 换成另一个 where,因为它会尝试过滤所有这些。

        Product::with(['getProductItem'])
        ->whereHas('getProductItem', function ($query) use ($request) {
            $query->where(function ($subquery) use ($request) {
                $subquery->where('itemSkuNumber', '=', $request->search);
                //put your orwhere queries in here
            });
        })
        ->get();

尝试whereHas

$products = Product::query()
     ->with(['getProductItem'])
     ->whereHas('getProductItem', fn ($query) => $query->where('itemSkuNumber', '=', $request->search)]))  
     ->orWhere(
         'name',
         $request->has('match') ? '=' : 'like',
         $request->has('match') ? $request->search : '%' . $request->search . '%'
      )
      ->orWhere('id', '=', $request->search)
      ->get();

@gguney,@Sumit,

感谢您的帮助,:)。

可以使用:

return Product::with(['getProductItem'])
                ->whereHas('getProductItem', function ($query) use ($request) {
                    $query->where('itemSkuNumber', '=', $request->search);
                })
                ->orWhere(
                    'name',
                    $request->has('match') ? '=' : 'like',
                    $request->has('match') ? $request->search : '%' . $request->search . '%'
                )
                ->orWhere('id', '=', $request->search)
                ->get();

@Sumit, 你有额外的括号。