对集合进行排序和分页

时间:2014-05-23 22:02:32

标签: php sorting laravel-4 pagination

我在排序然后在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');
  }
}

我错过了这里的大图片或我的错误在哪里?

1 个答案:

答案 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;
});