0
我有以下控制器我在哪里运行一些查询基于通过ajax来的变量。现在我的问题是我如何使它更有效的方式,而不检查每个条件,我可以使它动态的地方,它将检查变量,并只调用该语句的行?基于动态参数的控制器内函数调用
例如,假设它只有$ category_id & $ min_price,所以它将只运行那条语句,这样我的查询变得更快,并且还可以在控制器内保存no_of_statements?
public function searchByCheckbox(Request $request)
{
if(!empty($request->get('category_id'))||
!empty($request->get('industry_id')) ||
!empty($request->get('min_price')) ||
!empty($request->get('max_price'))
)
{
$query = DB::table('users')
->join('products','products.auth_id','users.id')
->Join('reviews','products.id','reviews.product_id')
->select('products.*','users.avatar',DB::raw('(sum(rating)/count(user_id)) as rating'))
->where('products.status','=','1')
->groupBy('products.id')
->latest();
if ($request->has('category_id')) {
$query->WhereIn('products.category_id', $request->get('category_id'));
}
if ($request->has('industry_id')) {
$query->WhereIn('products.industry_id', $request->get('industry_id'));
}
if ($request->get('min_price')!='0') {
$query->Where('products.regular_price','>' ,$request->get('min_price'));
}
if ($request->get('max_price')!='0') {
$query->Where('products.regular_price','<' ,$request->get('max_price'));
}
if($request->has('min_price') && $request->has('max_price')){
$query->whereBetween('products.regular_price',
[ $request->get('min_price'),
$request->get('max_price')
]);
}
if ($request->has('industry_id')&& $request->has('category_id'))
{
$query->orWhereIn('products.industry_id', $request->get('industry_id'));
$query->orWhereIn('products.category_id', $request->get('category_id'));
}
if ($request->has('industry_id')&& $request->has('category_id') && $request->get('min_price')!='0' && $request->get('max_price')!='0')
{
$query->orWhereIn('products.industry_id', $request->get('industry_id'));
$query->orWhereIn('products.category_id', $request->get('category_id'));
$query->orwhereBetween('products.regular_price',
[ $request->get('min_price'),
$request->get('max_price')
]);
}
$products = $query->get();
}
else
{
$products = DB::table('users')
->join('products','products.auth_id','users.id')
->Join('reviews','products.id','reviews.product_id')
->select('products.*','users.avatar',DB::raw('(sum(rating)/count(user_id)) as rating'))
->where('products.status','=','1')
->groupBy('products.id')
->latest()
->get();
}
return view('cart.ajax.product-result', ['products' => $products]);
}