【问题标题】:Laravel Paginate usage with DB::raw queryLaravel Paginate 使用 DB::raw 查询
【发布时间】:2017-03-02 05:43:13
【问题描述】:

我如何在这个查询中使用 paginate()?

$result = DB::select(DB::raw(" select a.user_id, a.user_email, 
a.user_account_status, a.created_at, b.s_account_limit AS account_limit,
 c.consumed_limit, ((b.s_account_limit*1024) - c.consumed_limit) AS 
remaining_limit FROM upload_limits as b, users AS a JOIN user_upload_limits as 
c WHERE (a.user_id=c.user_id) AND a.user_type='Simple'"));

【问题讨论】:

  • 简短回答:您无法在 Laravel 中对原始查询进行分页,但有一些解决方法。
  • $pagination = Paginator::make($book, count($book), 5);
  • 分页器无法正常工作。请提出一些建议

标签: php mysql laravel pagination


【解决方案1】:

您可以使用->paginate() 方法,或者如果您想手动创建分页,您可以执行以下操作:

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

$basicQuery = DB::select(DB::raw(" select a.user_id, a.user_email, a.user_account_status, a.created_at, b.s_account_limit AS account_limit, c.consumed_limit, ((b.s_account_limit*1024) - c.consumed_limit) AS remaining_limit FROM upload_limits as b, users AS a JOIN user_upload_limits as c WHERE (a.user_id=c.user_id) AND a.user_type='Simple'"));
$totalCount = $basicQuery->count();
$results = $basicQuery
    ->take($perPage)
    ->skip($skip)
    ->get();

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

return $paginator;

【讨论】:

  • 谢谢;非常感谢。
  • 未定义变量:take
【解决方案2】:

您还可以添加自定义排序方法,将 DB::raw 的数组结果与参数一起传递:

    public function sort($array_of_objects, $sort_by=null, $order, $page) 
{
    $collection = collect($array_of_objects);
    if ($sort_by)
    {

        if ($order=='desc') {
            $sorted = $collection->sortBy(function($role) use ($sort_by)
            {
                return $role->{$sort_by};
            })->reverse();
        } else if ($order=='asc') {
            $sorted = $collection->sortBy(function($role) use ($sort_by)
            {
                return $role->{$sort_by};
            });
        }
    } else {
        $sorted = $collection;
    }

    $num_per_page = 20;
    if (!$page) {
        $page = 1;
    }

    $offset = ( $page - 1) * $num_per_page;
    $sorted = $sorted->splice($offset, $num_per_page);

    return  new Paginator($sorted, count($array_of_objects), $num_per_page, $page);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 2018-01-31
    • 2018-04-15
    • 2020-06-10
    • 2017-06-14
    • 2019-11-23
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多