laravel 수 동 으로 배열 페이지 를 만 드 는 실현 코드

본 고 는 laravel 이 수 동 으로 배열 페이지 를 만 드 는 실현 코드 를 소개 하고 여러분 에 게 공유 합 니 다.구체 적 으로 다음 과 같 습 니 다.

laravel 페이지 기능:
몇 가지 방법 으로 데 이 터 를 페이지 로 나 눌 수 있다.가장 쉬 운 것 은[검색 어 구조 기]나[Eloquent 조회]에서 paginate 나 simplePaginate 방법 을 사용 하 는 것 입 니 다.
paginate 용법 은 다음 과 같 습 니 다:

//    
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);

//   
{{ $users->links() }}
효 과 는 다음 과 같 습 니 다:
"이전 페이지","1","2","3","다음 페이지"
simplePaginate 용법 은 다음 과 같 습 니 다.

//    
$users = User::where('votes', '>', 100)->simplePaginate(15);
return view('user.index', compact('users'));

//   
{{ $users->links() }}
효 과 는 다음 과 같 습 니 다:
"이전 페이지""다음 페이지"
주의:
4.567917.만약 에 페이지 보기 에 간단 한'다음 페이지'와'이전 페이지'의 링크 만 표시 해 야 한다 면 모든 페이지 의 링크 를 표시 하지 않 아 도 되 고 simplePaginate 방법 으로 더욱 효율 적 인 조 회 를 수행 하 는 것 을 추천 합 니 다
  • 현재 Laravel 은 groupBy 문 구 를 사용 하 는 페이지 작업 을 효과적으로 수행 할 수 없습니다.페이지 결과 에 groupBy 를 집중 적 으로 사용 할 필요 가 있다 면 데이터 베 이 스 를 조회 하고 수 동 으로 페이지 를 만 드 는 것 을 권장 합 니 다
  • 때때로 이런 상황 이 발생 할 수 있 습 니 다.$dataA 와$dataB 는 데이터베이스 에서 추출 한 두 개의 서로 다른 데이터 집합 입 니 다.$dataA 와$dataB 를 동시에 보기 로 분배 하고 페이지 별로 보 여 줘 야 합 니 다.이런 상황 은 어떻게 해 야 합 니까?

    이 경우 laravel 배열 로 페이지 를 나 눌 수 있 습 니 다.
    사실 laravel 문서 에는 페이지 클래스 를 사용 하여 페이지 를 나 누 는 방법 이 적 혀 있 지만 상세 한 설명 은 없습니다.
    수 동 으로 페이지 만 들 기
    페이지 인 스 턴 스 를 수 동 으로 만 들 고 최종 적 으로 배열 형식의 결 과 를 얻 으 려 면 필요 에 따라 Illuminate Pagination Paginator 나 Illuminate Pagination LengthAwarePaginator 인 스 턴 스 를 만 들 수 있 습 니 다.
    구체 적 으로 Illuminate Pagination LengthAware Paginator 의 이 코드 를 볼 수 있 습 니 다.
    
    public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
     {
      foreach ($options as $key => $value) {
       $this->{$key} = $value;
      }
    
      $this->total = $total;
      $this->perPage = $perPage;
      $this->lastPage = max((int) ceil($total / $perPage), 1);
      $this->path = $this->path !== '/' ? rtrim($this->path, '/') : $this->path;
      $this->currentPage = $this->setCurrentPage($currentPage, $this->pageName);
      $this->items = $items instanceof Collection ? $items : Collection::make($items);
     }
    다음은 구체 적 인 실현 코드 입 니 다.
    
    //    
    public function index(LiveService $liveService, Request $request)
     {
      //  A
      $dataA = User::where('status', 1)->get()->toArray();
      //  B
      $dataB = User::where('status', 2)->get()->toArray();
      $data = array_merge($dataA, $dataB);
      //       1
      $page = $request->page ?: 1;
      //     
      $perPage = 4;
      //           
      $offset = ($page * $perPage) - $perPage;
       //   LengthAwarePaginator ,        
      $data = new LengthAwarePaginator(array_slice($data, $offset, $perPage, true), count($data), $perPage,
       $page, ['path' => $request->url(), 'query' => $request->query()]);
      return view('admin.users.index', compact('data'));
     }
    
    //   
    {{ $data->links() }}
    
    이상 은 기본적으로 배열 페이지 를 완 성 했 습 니 다.대체적으로 절 차 는 컨트롤 러 가 현재 페이지 수 를 얻 는 것 입 니 다.예화LengthAwarePaginator필요 한 매개 변 수 를 입력 하고 각 페이지 의 항목 수 에 따라 array 를 이용 합 니 다.slice()방법 은 각 페이지 에 표시 할 데 이 터 를 가 져 옵 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기