在Laravel中过滤查询结果

时间:2020-07-08 07:25:31

标签: laravel eloquent where-clause

我正在尝试使用以下查询数据库:

$products = Product::where('available', true)->get();

然后我想将$ products传递给另一个函数以对其执行更多过滤。

$finalResult = $ProductInstance->searchProducts($products);

知道函数searchProducts的编写方式如下:

public function searchProducts($products, $searchValue){
 $finalProducts= $products->where('name', 'LIKE', "%{$searchValue}%")->get();
}

这不起作用,因为从第一行代码返回的结果存储在集合中。我该怎么办?

谢谢

2 个答案:

答案 0 :(得分:1)

searchProducts($products, $searchValue) { ...这里的 $ products 是一个集合实例,而不是查询生成器。

您将必须使用filter()和stripos()来模仿'%' . $searchValue . '%'

public function searchProducts($products, $searchValue){
    return $products->filter(function ($product) use ($searchValue) {
        return false !== stripos($product['name'], $searchValue);
    });
}

让我在下面的评论中发帖。

答案 1 :(得分:1)

$products = Product::where('available', true)->get();返回一个Collection,它不支持LIKE中的->where('name', 'LIKE', "%{$searchValue}%") where功能。

更改

$products = Product::where('available', true)->get();

$products = Product::where('available', true);

这将返回一个Query Builder对象,您可以向该对象添加其他数据库查询,并最终从searchProducts()方法返回一个Collection。