我正在阅读这篇文章,以了解如何根据他们有多少喜欢对我的数据库中的记录进行排序:
Laravel OrderBy relationship count
我提出了这个有效的方法:
$Book = Book::with('likes')->get()->sortByDesc(function($book_sort)
{
return $book_sort->likes->count();
});
这是基于本书的模型:
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();
}
}
但是现在我不知道如何对这些结果进行分页。有谁知道吗?
答案 0 :(得分: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'))
答案 1 :(得分:0)
sortByDesc()
和orderBy()
仅适用于馆藏。 orderByRaw()
仅适用于列名。此外,获得结果,排序和分页是一个性能。它也可以吃掉所有的记忆。
因此,我在这里看到的唯一解决方案是使用{{1}}甚至原始查询。