Laravel Vue 페이지네이터 충돌

3450 단어 vuelaravel
저는 최근에 Laravel Vue 프로덕션 웹사이트에 페이지 매김을 구현했으며 구현한 후 문제를 발견했습니다. 페이지가 매겨진 모든 데이터를 로드하는 초기 쿼리 문자열은 다음과 같습니다.
https://localhost.com?search=?year=2020
그런 다음 다음 페이지 버튼을 클릭하면 쿼리 문자열이 다음과 같이 표시됩니다.
https://localhost.com?page=1
여기에서 문제를 볼 수 있습니까? 이제 결과는 페이지를 매긴 결과에 쿼리 문자열을 포함하지 않기 때문에 모든 연도를 반영합니다. 그래서....이 문제를 어떻게 고칠까요? 실제로는 매우 간단합니다. 다음은 수정 이전의 백엔드에서 쿼리 문자열이 어떻게 생겼는지입니다.

잘못된




/**
     * Display a listing of the resource.
     *
     * @param Request $request
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if ($request->ajax()) {
            return new IncomeResource($request->user()->incomes()
                ->where(function($query) use ($request) {
                    $query->where('name', 'like', "%{$request->search}%")
                        ->orWhere('amount', 'like', "%{$request->search}%")
                        ->orWhere('notes', 'like', "%{$request->search}%")
                        ->orWhereHas('client', function ($query) use ($request) {
                            $query->where('clients_name', 'like', "%{$request->search}%");
                        });
                })
                ->whereYear('date_income_received', 'like', "%{$request->year}%")
                ->with('client.sessions')
                ->orderBy('date_income_received', 'desc')
                ->paginate(10);
           )
        }      
    }


오른쪽




/**
     * Display a listing of the resource.
     *
     * @param Request $request
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if ($request->ajax()) {
            $paginator = $request->user()->incomes()
                ->where(function($query) use ($request) {
                    $query->where('name', 'like', "%{$request->search}%")
                        ->orWhere('amount', 'like', "%{$request->search}%")
                        ->orWhere('notes', 'like', "%{$request->search}%")
                        ->orWhereHas('client', function ($query) use ($request) {
                            $query->where('clients_name', 'like', "%{$request->search}%");
                        });
                })
                ->whereYear('date_income_received', 'like', "%{$request->year}%")
                ->with('client.sessions')
                ->orderBy('date_income_received', 'desc')
                ->paginate(10);

            $paginator->appends([
                'search' => $request->search,
                'year' => $request->year
            ]);

            return new IncomesResource($paginator);
        }      
    }


Laravel paginator에는 URL에 쿼리 문자열 데이터를 추가하는 데 사용할 수 있는 append 메소드가 있습니다. 이렇게 하면 다음 또는 이전 버튼을 클릭할 때마다 해당 쿼리 문자열을 적용하는 링크에 쿼리 문자열이 자동으로 추가됩니다.

즐기다! 이 두통에서 다른 누군가를 돕기를 바랍니다.

좋은 웹페이지 즐겨찾기