select([ 'r.user_id', 'u.user_name', 'u.user_phonetic', 'u.user_regident_zip', 'u.user_regident_pre', 'u.user_regident_city', 'u.user_regident_add', 'u.user_relate_zip', 'u.user_relate_pre', 'u.user_relate_city', 'u.user_relate_add', 'u.user_birthdate', 'u.user_gender', 'u.user_mobile', 'u.user_homephone', 'u.user_school', 'u.user_graduate', 'u.user_remarks', 'r.reserve_id', 'r.park_id', 'p.park_name', 'r.price_parkplaceid', 'r.psection_id', DB::raw('ps.psection_subject as vehicle_type'), DB::raw('ut.usertype_subject1 as user_category1'), DB::raw('ut.usertype_subject2 as user_category2'), DB::raw('ut.usertype_subject3 as user_category3'), 'r.reserve_date', 'r.reserve_reduction as reduction', DB::raw('r.`800m_flag` as within_800m_flag'), ]) ->leftJoin('user as u', 'r.user_id', '=', 'u.user_id') ->leftJoin('park as p', 'r.park_id', '=', 'p.park_id') ->leftJoin('psection as ps','r.psection_id','=','ps.psection_id') ->leftJoin('usertype as ut','u.user_categoryid','=','ut.user_categoryid'); // フィルター条件 if ($request->filled('park_id')) { $q->where('r.park_id', $request->input('park_id')); } if ($request->filled('user_id')) { $q->where('r.user_id', $request->input('user_id')); } // 利用者分類(契約者一覧に合わせ、分類名1の完全一致を優先) if ($request->filled('user_category1')) { $val = trim(mb_convert_kana($request->input('user_category1'), 'asKV')); $q->where('ut.usertype_subject1', $val); } elseif ($request->filled('user_categoryid')) { // 既存互換:ID指定も残す $q->where('u.user_categoryid', $request->input('user_categoryid')); } if ($request->filled('user_tag_serial')) { $q->where('u.user_tag_serial', 'like', '%' . $request->input('user_tag_serial') . '%'); } if ($request->filled('user_tag_serial_64')) { $q->where('u.user_tag_serial_64', 'like', '%' . $request->input('user_tag_serial_64') . '%'); } if ($request->filled('user_phonetic')) { $q->where('u.user_phonetic', 'like', '%' . $request->input('user_phonetic') . '%'); } if ($request->filled('user_mobile')) { $q->where(function($sub) use ($request) { $sub->where('u.user_mobile', 'like', '%' . $request->input('user_mobile') . '%') ->orWhere('u.user_homephone', 'like', '%' . $request->input('user_mobile') . '%'); }); } if ($request->filled('user_primemail')) { $like = '%' . $request->input('user_primemail') . '%'; $q->where(function($w) use ($like){ $w->where('u.user_primemail','like',$like) ->orWhere('u.user_submail','like',$like); }); } if ($request->filled('user_workplace')) { $q->where('u.user_workplace', 'like', '%' . $request->input('user_workplace') . '%'); } if ($request->filled('user_school')) { $q->where('u.user_school', 'like', '%' . $request->input('user_school') . '%'); } // ソート(契約者一覧に合わせて許可する列を拡張) $sort = $request->input('sort', 'reserve_id'); $sortType = $request->input('sort_type', 'asc'); $allow = [ 'reserve_id' => 'r.reserve_id', 'user_id' => 'r.user_id', 'user_name' => 'u.user_name', 'park_id' => 'r.park_id', 'price_parkplaceid' => 'r.price_parkplaceid', 'psection_id' => 'r.psection_id', 'reserve_date' => 'r.reserve_date', ]; if (!isset($allow[$sort])) $sort = 'reserve_id'; $sortType = $sortType === 'desc' ? 'desc' : 'asc'; $rows = $q->orderBy($allow[$sort], $sortType) ->paginate(20)->withQueryString(); // 駐輪場リスト取得(必要なら) $parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get(); return view('admin.reservation.list', compact('rows', 'sort', 'sortType', 'parks')); } }