【问题标题】:How would I paginate these results in laravel?我将如何在 laravel 中对这些结果进行分页?
【发布时间】:2016-04-22 13:21:21
【问题描述】:

我正在阅读这篇文章,以了解如何根据记录的点赞数对我的数据库中的记录进行排序:

Laravel OrderBy relationship count

我想出了这个可行的方法:

$Book = Book::with('likes')->get()->sortByDesc(function($book_sort)
{
    return $book_sort->likes->count();
}); 

基于此 Book 模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    public $timestamps = true; 


    protected $fillable = [
    'title', 'author', 'category', 'featured', 'rating', 'description'
    ];

    public function category()
    {
        return $this->hasOne('App\Cat', 'id', 'category_id');
    }
    public function likes()
    {
        return $this->belongsToMany('App\User', 'favourite_books')->withTimestamps();
    }
    public function total_likes()
    {
        return $this->likes()->count();
    }
}

但是现在我被困在如何对这些结果进行分页。有人知道吗?

【问题讨论】:

    标签: laravel pagination pivot-table


    【解决方案1】:

    创建手动分页,试试这个:

    $Book = Book::with('likes')->get()->sortByDesc(function($book_sort)
    {
         return $book_sort->likes->count();
    }); 
    
    $paginator = new Illuminate\Pagination\Paginator($Book, 10);
    
    return view('pages.homepage', compact('paginator'))
    

    【讨论】:

    • 抱歉,我认为paginate()->sortByDesc(function(){};) 在这里不能正常工作。
    • sortByDesc 可以应用于集合laravel.com/docs/5.2/collections#method-sortby,分页方法根据laravel的API返回一个集合laravel.com/api/5.2/Illuminate/Database/Eloquent/…
    • 但也许你可以对@AlexeyMezenin,我之前没有测试过。
    • 我收到错误“方法附加不存在”。我在结果页的末尾有这个来打印页码:
    • @Magearlik,这真的是一个性能打击。你在这里做什么是得到 ALL books 和 ALL likes,然后才计数,整理它们并分页。它会杀死您主机的内存和 CPU。 Paginate 旨在仅查询部分数据,这就是它有用的原因。
    【解决方案2】:

    sortBy()sortByDesc() 仅适用于集合。 orderBy() 仅使用列名。此外,获取结果、对它们进行排序和分页是一个性能打击。它也会吃掉所有的记忆。

    所以,我在这里看到的唯一解决方案是使用 orderByRaw() 甚至是原始查询。

    【讨论】:

    • 这会给我这个错误“调用未定义的方法 Illuminate\Database\Query\Builder::sortByDesc()”
    • 调用未定义的方法 Illuminate\Database\Query\Builder::sortBy()
    • 好的,排序仅适用于集合。请阅读更新后的帖子。你能发布你的表格结构吗?
    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多