我试图找到不是免费产品且产品状态有效的产品,即1,但问题是它不能按照我想要的方式使用以下查询。它通过我想要的匹配为产品系列提供非活动和免费。如何通过修改以下Query来获得适当的输出?
此处$query
是搜索关键字
$products = DB::table('products')
->where('products.name' , 'like', '%'.$query.'%')
->orWhere('products.tags','like','%'.$query.'%')
->where('products.status','=',1)
->where('products.price','!=',0)
->groupBy('products.id')
->latest()
->paginate(3);
答案 0 :(得分:3)
你需要封装你的orWhere:
$products = DB::table('products')
->where(function($q) use ($query){
$q->where('products.name' , 'like', '%'.$query.'%')
->orWhere('products.tags','like','%'.$query.'%');
})
->where('products.status','=',1)
->where('products.price','!=',0)
->groupBy('products.id')
->latest()
->paginate(3);
应该呈现类似
的内容SELECT * FROM 'products'
WHERE (
products.name like '%query%' OR
products.tags like '%query%'
) AND
products.status = 1 AND
products.price <> 0
GROUP BY products.id