Laravel 4:如何使用Eloquent ORM进行“order by”排序

270

简单问题 - 如何在Laravel 4中以'id'为关键字降序排序。

我的控制器的相关部分如下:

$posts = $this->post->all()

据我理解,您使用了这条线路:

->orderBy('id', 'DESC');

但是这如何与我上面的代码相符呢?


9
你能否执行类似这样的操作:$posts = $this->post->orderBy('id', 'DESC')->get(); (说明:该代码段为一行PHP代码,目的是从数据库中获取帖子并按id降序排列。) - Matthew Camp
是的,抱歉我遇到了语法问题。谢谢 - 如果您将其发布为答案,我会很乐意选择它作为正确答案。 - Josh
在 Laravel 5 中,您可以使用:->orderByDesc('id'); - user3562771
3个回答

514
如果您正在使用post作为模型(不使用依赖注入),您也可以执行以下操作:
$posts = Post::orderBy('id', 'DESC')->get();

3
使用版本4时,这是正确的方法! - Ms01
4
仍然在5.1版本中可用。 - Geoherna
4
依然在5.4版本中继续工作。 - ako
4
在5.5版本中运作良好。 - Zulfiqar Tariq
31
我会为下一个需要发布帖子的人省去麻烦,这也适用于5.7版本。 - solstice
显示剩余11条评论

74

如果你正在使用Eloquent ORM,你应该考虑使用作用域(Scopes)。这可以将你的逻辑保留在模型中,使其更具可读性。

因此,在模型中,你会有:

public function scopeIdDescending($query)
{
        return $query->orderBy('id','DESC');
}   

在模型之外,您会有:

$posts = Post::idDescending()->get();

更多信息: http://laravel.com/docs/eloquent#query-scopes


在最后一行 $posts = Post::idDescending()->get(); 中,查询被传递到了 idDescending() 吗? - Alexander Solonik
3
Laravel会自动解析这个。 - Relaxing In Cyprus
1
我会选择这个答案。 这是我在日常工作中通常的做法:在模型中:public function scopeLatest($query) { return $query->orderBy('created_at')->get(); }在控制器中:return view('project.view')->with(['projects' => Project::latest()]); - Md Mazedul Islam Khan
我最喜欢这个答案,特别是如果你正在处理多个排序条件时,它比内联处理更好。谢谢!_.orderBy(this.users, ['name', 'last_login'], ['asc', 'desc']) - kaleazy

39

这是我处理此事的方式。

$posts = $this->post->orderBy('id', 'DESC')->get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接