페이징 쿼리


ThinkPHP에는 페이징 구현이 내장되어 있습니다. 데이터에 페이징 출력 기능을 추가하는 것은 매우 간단합니다. Db 클래스를 쿼리할 때 paginate 메서드를 직접 호출할 수 있습니다.

// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate(10);

// 渲染模板输出
return view('index', ['list' => $list]);

템플릿 파일의 페이징 출력 코드는 다음과 같습니다. :

<div>
<ul>
{volist name='list' id='user'}
    <li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$list|raw}

템플릿 파일의 페이징 출력 코드는 다음과 같습니다.

<div>
<ul>
{volist name='list' id='user'}
    <li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$list|raw}

페이징 출력의 템플릿 변수를 별도로 할당할 수도 있습니다.

// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate(10);

// 获取分页显示
$page = $list->render();

return view('index', ['list' => $list, 'page' => $page]);

템플릿 파일의 페이징 출력 코드는 다음과 같습니다.

<div>
<ul>
{volist name='list' id='user'}
    <li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$page|raw}

By 기본적으로 생성된 페이징 출력은 전체 페이징 데이터와 상위 및 하위 페이지 번호가 포함된 완전한 페이징 기능입니다. 페이징 스타일은 스타일을 통해서만 수정하면 됩니다. 총 데이터를 별도로 가져와야 하며

<ul class="pagination">
<li><a href="?page=1">&laquo;</a></li>
<li><a href="?page=1">1</a></li>
<li class="active"><span>2</span></li>
<li class="disabled"><span>&raquo;</span></li>
</ul>

를 사용하여 총 레코드 수를 전달할 수 있습니다

총 레코드 수 전달 지원 총계를 자동으로 계산하지 않고 레코드 수, 예:

// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id' ,'desc')->paginate(10);
// 获取总记录数
$count = $list->total();
return view('index', ['list' => $list, 'count' => $count]);

UNION 쿼리 및 일부 특별하고 복잡한 쿼리의 경우 이 방법을 사용하여 먼저 총 레코드 수를 별도로 쿼리한 다음 이를 페이징 메서드에 전달하는 것이 좋습니다.

페이징 후 데이터 처리

직접 각 순회 처리 지원 모델의 getter를 통해 필드를 추가하는 대신 페이지 매김 데이터 수정을 용이하게 하는 페이지 매김 클래스 이후의 데이터입니다.

// 查询状态为1的用户数据 并且每页显示10条数据 总记录数为1000
$list = Db::name('user')->where('status',1)->paginate(10,1000);
// 获取分页显示
$page = $list->render();

return view('index', ['list' => $list, 'page' => $page]);

모델 클래스가 페이징 데이터를 작동하는 경우 각 메서드의 클로저 함수에 반환 값을 사용할 필요가 없습니다. 예:

$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate()->each(function($item, $key){
    $item['nickname'] = 'think';
    return $item;
});

간단한 페이징


페이징 출력만 출력하면 되는 경우 상위 및 하위 페이지만 있는 경우 다음과 같은 간결한 페이징 코드를 사용할 수 있습니다.

$list = User::where('status',1)->order('id', 'desc')->paginate()->each(function($item, $key){
    $item->nickname = 'think';
});

간결한 페이징 모드의 출력 코드는 다음과 같습니다.

// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate(10, true);

// 渲染模板输出
return view('index', ['list' => $list]);

간결한 페이징 모드에서는 전체 데이터 수를 쿼리할 필요가 없으므로 쿼리를 향상할 수 있습니다. 성능.

페이징 매개변수

주요 페이징 매개변수는 다음과 같습니다.

매개변수 list_rowspagepathqueryfragmentvar_page

페이징 메서드를 호출할 때 페이징 매개변수 설정을 전달할 수 있습니다. 예:

<ul class="pager">
<li><a href="?page=1">&laquo;</a></li>
<li class="disabled"><span>&raquo;</span></li>
</ul>

페이징 시 쿼리 조건을 전달해야 하는 경우 쿼리 매개변수를 사용하여 추가 쿼리 매개변수를 연결할 수 있습니다

빅 데이터 페이징

대량 데이터의 페이징 쿼리를 위해 시스템에서는 고성능 paginateX 페이징 쿼리 방법을 제공하며, 페이지네이션 페이징 쿼리와 사용법이 약간 다릅니다. 페이지별로 쿼리하려는 데이터의 양이 100만 개가 넘는 경우, 특히 페이지 수가 많은 경우 paginateX 메서드를 사용하면 성능이 크게 향상됩니다. 그리고 이 페이징 쿼리는 대용량 데이터용으로 설계되었기 때문에 단순 페이징 모드만 사용할 수 있으므로 총 개수가 없습니다.

페이징 쿼리의 정렬 필드는 인덱스 필드를 사용해야 하며 연속 정수여야 합니다. 그렇지 않으면 데이터가 누락됩니다.

기본 시나리오는 기본 키를 기반으로 페이징 쿼리를 수행하는 것입니다. 기본적으로 페이징 데이터는 기본 키의 역순으로 쿼리됩니다.

$list = Db::name('user')->where('status',1)->paginate([
    'list_rows'=> 20,
    'var_page' => 'page',
]);

쿼리 시 기본 키와 정렬을 지정할 수도 있습니다.

$list = Db::name('user')->where('status',1)->paginateX(20);

쿼리 메서드는 두 개의 쿼리를 실행합니다. 첫 번째 쿼리는 현재 쿼리 조건에 맞는 최대값 또는 최소값을 찾은 다음 페이징을 수행합니다. 기본 키 쿼리 조건에 대해.

사용자 정의 페이징 클래스

페이징을 사용자 정의해야 하는 경우 페이징 드라이버를 확장할 수 있습니다.

그런 다음 공급자.php 정의 파일에 다시 바인딩하세요

$list = Db::name('user')->where('status',1)->paginateX(20, 'id', 'desc');
Description
페이지당 수
현재 페이지
url 경로
url 추가 매개변수
url 앵커
페이징 변수