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
我试图找到不是免费产品且产品状态为活动的产品,即 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