我在排序然后在laravel 4中对一个集合进行分页时遇到了很多麻烦。
$articles = Article::get();
$articles->sortBy('category.name');
所以我收到所有文章,然后我按名称对它们进行排序,但是当我尝试这样做时:
$articles->paginate(30);
我收到一个错误。我在分页时尝试了各种各样的变化,比如分页之前的分页,但是它也不起作用和其他各种各样的东西。
文章和类别之间的关系是这样的:
class Article extends Eloquent {
public function category(){
return $this->belongsTo('Category');
}
}
class Category extends Eloquent {
public function articles(){
return $this->hasMany('Article');
}
}
我错过了这里的大图片或我的错误在哪里?
答案 0 :(得分:0)
您应该立即使用paginate,除非有一个非常具体的原因,您希望获取所有内容然后进行操作。
$articles = Article::paginate(30);
或者
$articles = Article::where('category_id', '=', '5')->paginate(30);
或排序
$articles = Article::where('category_id', '=', '5')->sortBy('title')->paginate(30);
你的例子让我问:什么是sortBy(' category.name')引用?你在文章表上,没有引用或类别表的任何内容所以这可能(可能)错误...你的文章表上是否有category_id字段以供参考该类别?如果您想加入类别表并按类别名称对文章进行排序,您应该尝试类似
的内容 $articles = Category::where('id', 'IN', '5,6,7,8,9')->articles->paginate(30);
但这假设您保留了通常的约定,例如在文章中使用category_id,正确命名表格或以其他方式声明关系字段等。
有一些方法可以使用闭包来操作已获取的集合。从documentation:
复制$roles = $roles->sortBy(function($role)
{
return $role->created_at;
});