orWhere Laravel 查询生成器中的查询

orWhere Query in Laravel Query Builder

我试图找到不是免费产品且产品状态为活动的产品,即 1,但问题是它无法按照我想要的方式使用以下查询。它为我想要的匹配项提供了非活动和免费的产品集合。如何通过修改以下查询来获得适当的输出? 这里$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);

你需要封装你的 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