如何在Laravel中使用偏移量和限制

时间:2019-08-20 12:02:08

标签: php laravel search limit offset

我面临使用偏移量和限制获取记录的问题。

当前我的数据库中有73条记录

我的身体要求如下所示。

{

"email": "",
"name": "",
"role_id":"",
"pageNumber": 8,
"pageSize": 10
 }

此处页数8表示7页,因为它从0开始 并且页面大小为10表示要在页面中显示10条记录,并且预期输出应为3条记录,因为在70到80之间有3条记录,因为我的总记录为73,并且应该显示3条记录。

但是它显示10条记录:

我的代码:

                $pram = $request->name;
    $email= $request->email;
    $roleId= $request->role_id;
    $pageNumber= $request->pageNumber;
    $pageSize= $request->pageSize;

    $UserResultQuery = User::with('userBasicInfo','userFacility','roles');

    if (!empty($pram)) {
        $UserResultQuery->where(function ($query) use ($pram) {
            $query->whereHas('userBasicInfo', function ($query1) use ($pram) {
                $query1->where('first_name', 'like', '%' . $pram . '%');
                $query1->orWhere('middle_name', 'like', '%' . $pram . '%');
                $query1->orWhere('last_name', 'like', '%' . $pram . '%');

            })->with(['userBasicInfo' => function ($query1) use ($pram) {
                $query1->where('first_name', 'like', '%' . $pram . '%');
                   $query1->orWhere('middle_name', 'like', '%' . $pram . '%');
                   $query1->orWhere('last_name', 'like', '%' . $pram . '%');
            }]);
        });
    }
    if (!empty($roleId)) {
        $UserResultQuery->where(function ($query) use ($roleId) {
            $query->whereHas('userFacility', function ($query1) use ($roleId) {
                $query1->where('role_id', $roleId);
            })->with(['userFacility' => function ($query1) use ($roleId) {
                $query1->where('role_id', $roleId);
            }]);
        });
    }
    if (!empty($email)) {
        $UserResultQuery->where('email', 'like', '%' . $email . '%');
    }

    $results=$UserResultQuery->offset($pageNumber)->limit($pageSize)->get();
    $results=$results->toArray();       // here using offset and limit
        $totalRecords=count($allUsers);

     return response(['status' => true, 'data' => $user_array,'totalRecords' => $totalRecords]);

希望您能理解我的问题。 非常感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:1)

将偏移行数传递给offset()而不是页码。

$offset = ($pageNumber - 1) * $pageSize;
$results=$UserResultQuery->offset($offset)->limit($pageSize)->get();

您也可以使用此forPage(int $page, int $perPage = 15) doc

$results=$UserResultQuery->forPage($pageNumber, $pageSize)->get();