首页 > 解决方案 > 如何为查询添加分页?

问题描述

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

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

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

有人可以帮我吗?

标签: phplaravellaravel-5.6

解决方案


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

$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

推荐阅读