Laravel集合用where子句分页

问题描述 投票:0回答:1

我有一个新闻表和我管理的阅读或未读标志。所以我想分页两个标志是单独的,没有额外的数据库查询。我的要求是得到所有的新闻和过滤已读或未读和分页为一个单独的表视图.一旦我尝试下面的代码,但得到一个错误的消息 Method Illuminate\Database\Eloquent\Collection::paginate does not exist.

    $ns=News::all();
    $ns->where('read',1)->paginate(2);
    $ns->where('read',0)->paginate(2);

我想只用一个DB查询就可以做到这一点,我有一个新闻表,我管理着已读或未读标志。

laravel eloquent laravel-6
1个回答
1
投票

Laravel paginate不能从集合中进行分页,你需要雄辩的查询生成器来代替.

https:/laravel.comdocs7.xpagination#paginating-query-builder结果。

所以,如果你还想从集合中创建一个分页,你可以用宏为集合创建自定义分页。一个例子在这个gist中。

https:/gist.github.comsimonhamp549e8821946e2c40a617c85d2cf5af5e。


0
投票

你可以试试下面的代码

$readns = News::where('read',1)->paginate(2);
$unreadns = News::where('read',0)->paginate(2);

你可以使用chunk()来处理。检查这个 laravel.comdocs7.xqueries#chunkingresults


0
投票

请尝试将其添加到帮助者中

function paginate($items, $perPage = 15, $page = null, $options = []) {
    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
    $items = $items instanceof Collection ? $items : Collection::make($items);
    return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
});

使用。

$ns = News::all();
$ns1 = paginate((clone $ns)->where('read', 1), 2);
$ns2 = paginate((clone $ns)->where('read', 0), 2);
© www.soinside.com 2019 - 2024. All rights reserved.