Laravel 中不同的筛选条件要 join 不同的表,怎样优雅的实现?
代码还没写完,写到这就感觉太笨重了。
$list = DB::table('various_plan')
->leftJoin('user','various_plan.various_uid','=','user.user_id')
->leftJoin('user_card','various_plan.various_cid','=','user_card.card_id')
->leftJoin('various_plan_info','various_plan.various_id','=','various_plan_info.various_id')
->leftJoin('bank_list','user_card.card_bank_id','=','bank_list.list_id')
->select('various_plan.*','user.user_name','user_card.card_phone','various_plan_info.various_id',
DB::raw("CONCAT_WS(':',cc_bank_list.list_name,cc_user_card.card_no) as bankinfo"))
->where($where)
->groupBy('various_plan_info.various_id')
->orderBy('various_plan.various_id','desc')
->paginate(15);
if($request->input('various_form_no')=='' && $request->input('plan_form_no')==''
&& $request->input('various_state')== 0 && $request->input('user_name')==''
&& $request->input('user_phone') == '' && $request->input('bank_id') == 0)
{
$list_count = DB::table('various_plan')
->where($where)
->count();
}elseif($request->input('various_state')!= 0) {
$list_count = DB::table('various_plan')
->where($where)
->count();
}elseif($request->input('bank_id') > 0){
$list_count = DB::table('various_plan')
->leftJoin('user','various_plan.various_uid','=','user.user_id')
->leftJoin('user_card','various_plan.various_cid','=','user_card.card_id')
->leftJoin('bank_list','user_card.card_bank_id','=','bank_list.list_id')
->where($where)
->count();
}
$list = $list->toArray();
return json_encode(['status'=>0,'msg'=>'成功','total'=>$list_count,'data'=>$list]);
推荐文章: