我正在尝试使用以下查询数据库:
$products = Product::where('available', true)->get();
然后我想将$ products传递给另一个函数以对其执行更多过滤。
$finalResult = $ProductInstance->searchProducts($products);
知道函数searchProducts的编写方式如下:
public function searchProducts($products, $searchValue){
$finalProducts= $products->where('name', 'LIKE', "%{$searchValue}%")->get();
}
这不起作用,因为从第一行代码返回的结果存储在集合中。我该怎么办?
谢谢
答案 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。