我有一个搜索框,可以搜索产品。我希望它的工作方式是,如果我搜索产品名称,并且该产品存在,那么它将返回与搜索匹配的产品。如果搜索与任何产品的名称都不匹配,请然后搜索产品说明。这是我尝试过的
$products = Product::where(function ($query) use ($terms) {
foreach ($terms as $term) {
// Loop over the search terms
$query->orWhere('name', 'like', '%' . $term . '%');
}
})->latest()->paginate($productsPerPage);
if(empty($products)){
$products = Product::where(function ($query) use ($terms) {
foreach ($terms as $term) {
$query->orWhere('description', 'like', '%' . $term . '%');
}
})->latest()->paginate($productsPerPage);
}
但是,这不起作用,如果搜索中包含产品说明,则不会返回任何结果。
答案 0 :(得分:1)
empty($products)
不起作用,因为paginate
调用总是返回一个LengthAwarePaginator
实例,因此不是empty
可以使用以下代码:
$products = Product::where(function ($query) use ($terms) {
foreach ($terms as $term) {
// Loop over the search terms
$query->orWhere('name', 'like', '%' . $term . '%');
}
})->latest()->paginate($productsPerPage);
if ($products->total() == 0) {
$products = Product::where(function ($query) use ($terms) {
foreach ($terms as $term) {
$query->orWhere('description', 'like', '%' . $term . '%');
}
})->latest()->paginate($productsPerPage);
}