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]);
关于 LearnKu
高认可度评论:
以下代码仅供参考, 可以按照这个思路走
我觉得有的时候没必要一条sql解决问题,分开写多好
以下代码仅供参考, 可以按照这个思路走
把公共的拎出来:
你这么写也太累了,你可以把条件过滤一下再去执行sql。
把符合要求的条件统一塞到你的$where中,不符合的过滤掉,再去执行sql。
laravel为啥要db,这样的话和tp得写法有什么不同,又不是特别复杂的查询,只能sql。。。。。一个with就可以解决了,最多加个wherehas