Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel分页仅显示第一页';内容_Php_Laravel - Fatal编程技术网

Php Laravel分页仅显示第一页';内容

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,通过返回分页对象来获取对象数组。问题是,访问paginate对象的第一页可以正常工作,但第二页和下一页只返回第一页内容。我只是这样调用URL:

/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(),直到它为我提供了一个解决方案。我想问你是否找到了答案,但很高兴你找到了答案。我想在晚上再看一眼(因为我实际上正在工作),但我完全忘记了。对不起,我想问你是否明白了,但很高兴你明白了。我想在晚上再看一眼(因为我实际上正在工作),但我完全忘记了。我很抱歉。