如何分页DB :: select(...)结果并获取links()方法?

时间:2019-11-09 15:04:45

标签: laravel

我有一个庞大而又困难的SQL查询。这对我来说可以。我在控制器中有以下代码:

 public function index(OpenRegDepDataReportInterface $openRegDepDataReport, Request $request): Renderable
    {
        $applications = $openRegDepDataReport->getReport($advertisers, $category);

        return view('applications.index', compact('applications'));
    } 

因此,方法getReport给我一个DB::select('<here is my big diffecult SQL>')的结果,众所周知,它是一个数组。

但是正如您所看到的,我正在尝试将结果传递给视图。而且,当然,我想在视图中调用$applications->links(),就像集合eloquent一样。哪种方法更合适,更快捷?

3 个答案:

答案 0 :(得分:1)

doc

要在表上显示分页,必须先调用select然后再调用分页方法。

在控制器中:

$test = DB::table('users')->select('id')->paginate(10);

在视图中:

$test->links();

答案 1 :(得分:0)

简单答案,请使用DB_HOST=localhost DB_USER=root DB_PASS=s1mpl3 const db = require('db') db.connect({ host: process.env.DB_HOST, username: process.env.DB_USER, password: process.env.DB_PASS }) 方法:

function x() {
    let y = {
        "Caspian Sea": 560,
        "Tarn Hows": 53,
        "Crater Lake": 324,
        "Lake Tanganyika": 803,
        "Lake Vostok": 546,
        "Lake Baikal": 897,
    };
}

Object.entries(x).forEach((entry) => {
    console.log(entry);|
})

//for (let entry of Object.entries( y )) console.log(entry);

//let entries = Object.entries(x)
//console.log(entries);

但是,paginate()仅适用于集合,并且由于您具有对象数组,因此需要首先使用forPage()方法将其变成集合:

  

forPage方法返回一个新集合,该集合包含将在给定页码上显示的项目。该方法接受页码作为其第一个参数,接受每页显示的项目数作为其第二个参数:

$basicQuery = DB::select(DB::raw("<here is the big diffcult SQL query>"));

复杂的答案:自己构建一个分页程序实例:

paginate()

我建议使用$collection = collect($basicQuery); $chunk = $collection->forPage(2, 3); $chunk->all(); 方法。

您可以了解有关Laravel's pagination的更多信息。

答案 2 :(得分:0)

因此根据文档,如果您的$perPage = 10; $page = $request->input("page", 1); $skip = $page * $perPage; if($take < 1) { $take = 1; } if($skip < 0) { $skip = 0; } $basicQuery = DB::select(DB::raw("<here is the big diffcult SQL query>")); $totalCount = $basicQuery->count(); $results = $basicQuery ->take($perPage) ->skip($skip) ->get(); $paginator = new \Illuminate\Pagination\LengthAwarePaginator($results, $totalCount, $take, $page); return $paginator; 返回了查询生成器结果,则只需将paginate()附加到该结果即可。

  

https://laravel.com/docs/master/pagination#paginating-query-builder-results

$applications