Php Laravel分页仅显示第一页';内容
我正在编写一个api,通过返回分页对象来获取对象数组。问题是,访问paginate对象的第一页可以正常工作,但第二页和下一页只返回第一页内容。我只是这样调用URL:Php Laravel分页仅显示第一页';内容,php,laravel,Php,Laravel,我正在编写一个api,通过返回分页对象来获取对象数组。问题是,访问paginate对象的第一页可以正常工作,但第二页和下一页只返回第一页内容。我只是这样调用URL: /api/get?page=1 /api/get?page=2 数据进入: { "page_id":116, "descending":true, "rowsPerPage":10, "page":1, &
/api/get?page=1
/api/get?page=2
数据进入:
{
"page_id":116,
"descending":true,
"rowsPerPage":10,
"page":1,
"search":null,
"sortBy":"name",
"tag_id":null,
"start_date":null,
"end_date":null,
"from_mobile":true
}
下面是我的代码:
function get_list(Request $req)
{
$orderby = "id";
$order = "DESC";
$flowdb = Flow::leftjoin("flow_tags", "flow.id", "=", "flow_tags.flow_id");
$flowdb->leftjoin("tags", "tags.id", "=", "flow_tags.tag_id");
$flowdb->leftjoin("flow_stocks", "flow.id", "=", "flow_stocks.flow_id");
$flowdb->select(DB::Raw("flow.id,flow.name,flow.used_count,flow.payload,GROUP_CONCAT(CONCAT('\"','[',tags.id,',', tags.name,']','\"')) as tags, count(flow_stocks.stock_id) as stock_count"));
$flowdb->where("flow.active", ">", 0);
$flowdb->where("flow.page_id", $req->page_id);
$flowdb->groupBy("flow.id");
if($req->from_mobile)
{
$flowdb->where('flow.from_mobile',true);
}
if ($req->sortBy) {
$orderby = $req->sortBy;
}
$order = $req->descending ? 'DESC' : 'ASC';
$flowdb->orderBy($orderby, $order);
$flowdb->orderBy("flow_tags.id", "ASC");
if ($req->rowsPerPage && $req->rowsPerPage !== -1) {
$flows = $flowdb->paginate($req->rowsPerPage);
} else {
$flows = $flowdb->paginate(999999999);
}
return $flows;
}
我还尝试了laravel手动分页器,但错误没有解决
public function paginator(Request $request, $object, $perPage)
{
$currentPage = LengthAwarePaginator::resolveCurrentPage()??1;
$currentItems = array_slice($object, $perPage * ($currentPage - 1), $perPage);
$paginatedItems = new LengthAwarePaginator($currentItems, count($object), $perPage, $currentPage);
$paginatedItems->setPath($request->url());
return $paginatedItems;
}
看看这个方法。参数
$perPage
是您希望每页显示多少结果
/**
* Paginate the given query.
*
* @param int|null $perPage
* @param array $columns
* @param string $pageName
* @param int|null $page
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
*
* @throws \InvalidArgumentException
*/
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
{
$page = $page ?: Paginator::resolveCurrentPage($pageName);
$perPage = $perPage ?: $this->model->getPerPage();
$results = ($total = $this->toBase()->getCountForPagination())
? $this->forPage($page, $perPage)->get($columns)
: $this->model->newCollection();
return $this->paginator($results, $total, $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
}
这意味着设置此条件的要求有问题:
$req->rowsPerPage&&$req->rowsPerPage!==-1
使用dd($query)
我认为,如果不设置条件flow.page_id,$req->page_id
的话,就可以更容易地检索整个数据集,我认为罪魁祸首就在那里,但是如果没有数据就很难验证
最后,在$req->rowsPerPage&&$req->rowsPerPage!==-1
:
$flowdb->get();
我不确定这是否有用。但我也看到过这样的例子。但是,我想不出任何例子。看看这个方法。参数
$perPage
是您希望每页显示多少结果
/**
* Paginate the given query.
*
* @param int|null $perPage
* @param array $columns
* @param string $pageName
* @param int|null $page
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
*
* @throws \InvalidArgumentException
*/
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
{
$page = $page ?: Paginator::resolveCurrentPage($pageName);
$perPage = $perPage ?: $this->model->getPerPage();
$results = ($total = $this->toBase()->getCountForPagination())
? $this->forPage($page, $perPage)->get($columns)
: $this->model->newCollection();
return $this->paginator($results, $total, $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
}
这意味着设置此条件的要求有问题:
$req->rowsPerPage&&$req->rowsPerPage!==-1
使用dd($query)
我认为,如果不设置条件flow.page_id,$req->page_id
的话,就可以更容易地检索整个数据集,我认为罪魁祸首就在那里,但是如果没有数据就很难验证
最后,在$req->rowsPerPage&&$req->rowsPerPage!==-1
:
$flowdb->get();
我不确定这是否有用。但我也看到过这样的例子。但是我想不出任何例子。我设法找到了解决方案。问题是我意外地将
page=1
放在请求参数中,laravel paginate使用此页面值(在本例中为1)呈现所有页面的结果。我在网上读了一些关于这方面的文章,发现如果用户没有在请求中给出特定的page
值,默认情况下,laravel会从第1页开始渲染。因此,在本例中,我并不真正需要page
参数。我设法找到了解决方案。问题是我意外地将page=1
放在请求参数中,laravel paginate使用此页面值(在本例中为1)呈现所有页面的结果。我在网上读了一些关于这方面的文章,发现如果用户没有在请求中给出特定的page
值,默认情况下,laravel会从第1页开始渲染。所以在这种情况下,我并不真正需要page
参数。因为您在分页中的行数中添加了9999999
,实际上这种情况从未发生过,我总是设置$req->rowsPerPage=10 bro因为您在分页中的行数中添加了99999999
,所以我总是设置这种情况$req->rowsPerPage=10如果我将条件更改为if($req->rowsPerPage){…},那么问题也没有解决。page_id是一种id,我确实需要这个过滤器兄弟。我认为您的代码类似于我的手动分页器,它在我的其他函数中运行良好,但在这种情况下无法解决。请尝试使用if语句($req->rowsPerPage)$flowdb=$flowdb->get()代码>$flowdb->get()代码>这将返回一个对象列表,但我需要对其进行分页。通过使用$req->rowsPerPage=10
。问题是始终显示所有页面的第一页结果。您需要对对象列表进行分页,这就是分页的工作方式;/所以要么是这样,要么是你的疑问出了问题。你真的在陈述中吗?你有没有在你的声明中使用dump和die来检查这一点?如果你没有得到陈述,你一定要检查你的查询是否给了你预期的结果。在这一点上,有些事情并没有按预期进行,我只是对函数中的每个变量使用dd(),直到它为我提供了解决方案。如果我将条件更改为if($req->rowsPerPage){…},问题也没有解决。page_id是一种id,我确实需要这个过滤器兄弟。我认为您的代码类似于我的手动分页器,它在我的其他函数中运行良好,但在这种情况下无法解决。请尝试使用if语句($req->rowsPerPage)$flowdb=$flowdb->get()代码>$flowdb->get()代码>这将返回一个对象列表,但我需要对其进行分页。通过使用$req->rowsPerPage=10
。问题是始终显示所有页面的第一页结果。您需要对对象列表进行分页,这就是分页的工作方式;/所以要么是这样,要么是你的疑问出了问题。你真的在陈述中吗?你有没有在你的声明中使用dump和die来检查这一点?如果你没有得到陈述,你一定要检查你的查询是否给了你预期的结果。在这一点上,有些事情并没有按预期进行,我只是对函数中的每个变量使用dd(),直到它为我提供了一个解决方案。我想问你是否找到了答案,但很高兴你找到了答案。我想在晚上再看一眼(因为我实际上正在工作),但我完全忘记了。对不起,我想问你是否明白了,但很高兴你明白了。我想在晚上再看一眼(因为我实际上正在工作),但我完全忘记了。我很抱歉。