when($request->filled('search'), function (Builder $query) use ($request) { $search = $request->input('search'); $query->whereAny([ 'first_name', 'last_name', 'username', 'id', 'status', 'email', 'created_at' ], 'LIKE', "%$search%"); }) ->when($request->filled('sort'), function (Builder $query) use ($request) { switch ($request->input('sort')) { case 'newest': $query->orderByDesc('created_at'); break; case 'email': $query->orderBy('email'); break; case 'name_desc': $query ->orderByDesc('first_name') ->orderByDesc('last_name'); break; default: $query ->orderBy('first_name') ->orderBy('last_name'); break; } }) ->paginate(); return view('admin.admins.index', compact('admins')); } public function create() { return view('admin.admins.create'); } public function store(AdminStoreRequest $request) { $inputs = $request->validated(); try { DB::beginTransaction(); $inputs['password'] = Hash::make($inputs['password']); Admin::create($inputs); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); Log::error($exception); return back() ->withErrors([ 'general' => 'خطایی رخ داده است' ]) ->withInput(); } return redirect() ->route('admin.admins.index') ->withErrors([ 'success' => 'عملیات با موفقیت انجام شد' ]); } public function edit(Admin $admin) { return view('admin.admins.edit', compact('admin')); } public function update(AdminUpdateRequest $request, Admin $admin) { $inputs = $request->validated(); try { DB::beginTransaction(); if (!empty($inputs['password'])) { $inputs['password'] = Hash::make($inputs['password']); } else { unset($inputs['password']); } $admin->update($inputs); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); Log::error($exception); return back() ->withErrors([ 'general' => 'خطایی رخ داده است' ]) ->withInput(); } return redirect() ->route('admin.admins.index') ->withErrors([ 'success' => 'عملیات با موفقیت انجام شد' ]); } public function destroy(Admin $admin) { $admin->delete(); return redirect() ->route('admin.admins.index') ->withErrors([ 'success' => 'عملیات با موفقیت انجام شد' ]); } }