使用 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,
你有额外的括号。
我正在尝试在站点中实现搜索功能。用户可以指定可以匹配 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, 你有额外的括号。