或者在Laravel查询生成器中查询

时间:2018-01-17 15:55:19

标签: php mysql laravel query-builder

我试图找到不是免费产品且产品状态有效的产品,即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);

1 个答案:

答案 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