【问题标题】:Laravel Pagination with a Raw Query带有原始查询的 Laravel 分页
【发布时间】:2017-10-04 04:30:45
【问题描述】:

我在 Laravel 中使用原始 SQL 查询,因为一开始我更容易进行复杂的查询,所以我就这样使用它们。

现在我想获取用户 7 的 cmets 列表,我想在 5 中对 cme​​ts 进行分页。

这就是我所拥有的:

$comments = DB::select( DB::raw("SELECT users.name,  reviews.comment, reviews.comment_score FROM reviews JOIN users WHERE reviews.user_id = :logged_user;")
   ,array('logged_user' => $user_id,));

所以这个查询依赖于正在查看视图的用户,接收一个变量。

我看到的所有分页都是 Eloquent 查询,我没有找到任何明确的用法。

如果我在最后一个括号的末尾添加 '->paginate(5)',或者稍后添加到变量中,例如 $cmets->paginate(5);我得到一个:

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

对此有所了解?

非常感谢! =)

【问题讨论】:

    标签: php laravel pagination


    【解决方案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; }
    
    $comments = DB::select( DB::raw("SELECT users.name,  reviews.comment, reviews.comment_score FROM reviews JOIN users WHERE reviews.user_id = :logged_user;"),array('logged_user' => $user_id,));
    
    $totalCount = $comments->count();
    $results = $comments
        ->take($perPage)
        ->skip($skip)
        ->get();
    $paginator = new \Illuminate\Pagination\LengthAwarePaginator($results, $totalCount, $take, $page);
    
    return $paginator;
    

    希望对你有帮助!

    【讨论】:

    • 哇,我永远不会想出这样的把戏。 =) 我有问题,因为我没有任何 $request 变量。我只想显示一个欢迎页面,其中包含一个用户页面的汇总信息。所以我得到:未定义的变量:请求谢谢!
    • 如果您想为一个用户分页您的评论,需要在上面的代码中进行一些微调,或者您可以使用数据表对特定用户的评论分页,
    • 我知道,但我不知道如何获取 $perPage 和 $page 变量。我没有任何 $request 变量。我怎样才能初始化这两个变量?感谢您的帮助。
    • 做一件事得到简单的用户数据,并使用来自github.com/yajra/laravel-datatables的cmets数据表,我在我的一个项目中使用过它,你需要制作新的.function来使用在 ajax 中用于数据表。
    • 非常感谢您的帮助,真的。首先,我将尝试将其转换为 Eloquent 模型。如果我觉得困难,会检查这个解决方案!
    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 2015-01-02
    • 2016-02-03
    • 2012-10-29
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多