如何在查询中添加分页?

时间:2018-10-10 10:32:01

标签: php laravel laravel-5.6

在我之前只是做一个查询,它选择了一些字段和一些条件。这行代码为我提供了正确的结果。

public function index()
{
    // Get links
    $links = Link::select('id', 'url', 'short_url', 'counter', 'expired_on')
        ->orderBy('id', 'desc')
        ->where('delete_flg', 0)
        ->get();

    // Return data
    return view('dashboard')->with(
        array(
            'links' => json_decode($links),
            'current_datetime' => Carbon::now()
        )
    );
}

现在我要对上述行执行分页。

$links = Link::select('id', 'url', 'short_url', 'counter', 'expired_on')
    ->orderBy('id', 'desc')
    ->where('delete_flg', 0)
    ->get()->paginate(2);

当我最后尝试使用paginate(2)时,出现错误:

Method Illuminate\Database\Eloquent\Collection::paginate does not exist.

因此在其他一些教程中,我尝试不使用-> get()然后进行分页 然后我得到这样的错误。

count(): Parameter must be an array or an object that implements Countable

我对如何实现分页感到困惑。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:5)

您可以简单地执行以下操作:

$links = Link::select('id', 'url', 'short_url', 'counter', 'expired_on')
            ->orderBy('id', 'desc')
            ->where('delete_flg', 0)
            ->paginate(2);

分页已经像->get()

这是您将数据/集合返回到视图的方式:

// return data
return view('dashboard', compact('links'));

替代紧凑型

return view('dashboard')->with([
    'links' => $links
]);

然后在您看来,您可以对数据做任何想做的事情:

@foreach($links as $link)
    <p>{{ link }}</p>
@endforeach

答案 1 :(得分:0)

这是documented change in PHP 7.2。您需要将Laravel更新到5.6+或将PHP降级到7.1版。

此外,您必须使用不带paginate()的{​​{1}},还应该看看pagination documentation