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]);
}