我如何对这个原始查询进行分页?

分享于2022年07月17日 laravel mysql pagination 问答
【问题标题】:我如何对这个原始查询进行分页?(How can i paginate this raw query?)
【发布时间】:2022-01-24 08:57:06
【问题描述】:

我正在 Laravel 中开展一个项目,并使用 DB 外观来运行 sql 的原始查询。就我而言,我使用的是 DB::select,问题是分页方法无法使用它并显示此错误

调用数组上的成员函数 paginate()

如何对这个原始查询进行分页?这是我的代码:

$que= DB::select("SELECT * FROM tbl_ourpeople INNER JOIN tbl_ourpeople_category ON
tbl_ourpeople.category = tbl_ourpeople_category.categoryId WHERE tbl_ourpeople.id>1");
return view('view',compact('que'));


【解决方案1】:

对于纯原始查询,您可以使用这种方式。

$perPage = $request->input("per_page", 10);
$page = $request->input("page", 1);
$skip = $page * $perPage;
if($take < 1) { $take = 1; }
if($skip < 0) { $skip = 0; }

$que = DB::select(DB::raw("SELECT * FROM tbl_ourpeople INNER JOIN tbl_ourpeople_category ON
tbl_ourpeople.category = tbl_ourpeople_category.categoryId WHERE tbl_ourpeople.id>1"));

$totalCount = $que->count();
$results = $que
    ->take($perPage)
    ->skip($skip)
    ->get();

$paginator = new \Illuminate\Pagination\LengthAwarePaginator($results, $totalCount, $take, $page);

return $paginator;

  • 这不是可行的方法。这将获取数据作为集合,然后将应用分页。数据量大时会占用大量内存
  • 是的,我非常同意你的看法。由于他想使用纯粹的原始查询,所以我为他提供了这个解决方案。最好的办法是用雄辩的方式。