Laravel 4:如何使用 Eloquent ORM“排序”[重复]

Posted

技术标签:

【中文标题】Laravel 4:如何使用 Eloquent ORM“排序”[重复]【英文标题】:Laravel 4: how to "order by" using Eloquent ORM [duplicate] 【发布时间】:2013-07-07 08:27:11 【问题描述】:

简单的问题 - 我如何在 Laravel 4 中按 'id' 降序排序。

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

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

据我了解,您使用此行:

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

但这与我上面的代码有什么关系呢?

【问题讨论】:

你不能这样做:$posts = $this->post->orderBy('id', 'DESC')->get(); 是的,很抱歉我遇到了语法问题。谢谢 - 如果您将其发布为答案,我会很乐意将其选为正确答案。 感谢您的提问。正是我想要的。 在 laravel 5 中你可以使用:->orderByDesc('id'); 【参考方案1】:

这就是我的想法。

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

【讨论】:

【参考方案2】:

如果你使用 post 作为模型(没有依赖注入),你也可以这样做:

$posts = Post::orderBy('id', 'DESC')->get();

【讨论】:

这是使用版本 4 时要走的路! 在 5.1 中仍然有效 在 5.4 中绝对还在工作 在 5.5 中也能正常工作 我会避免下一个人在未来发帖,也可以在 5.7 中工作【参考方案3】:

如果您使用的是 Eloquent ORM,您应该考虑使用范围。这会将您的逻辑保留在它所属的模型中。

因此,在模型中,您将拥有:

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()的查询在哪里 Laravel 会自动解析。 我会选择这个答案。以下是我在日常工作中通常的做法: 在模式内:public function scopeLatest($query) return $query->orderBy('created_at')->get(); 在控制器内:return view('project.view')->with(['projects' => Project::latest()]); 我最喜欢这个答案而不是在线处理,尤其是如果您要处理多个订单条件。谢谢! _.orderBy(this.users, ['name', 'last_login'], ['asc', 'desc'])

以上是关于Laravel 4:如何使用 Eloquent ORM“排序”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4:如何使用 Eloquent ORM“排序”[重复]

如何在 Laravel 4 中手动创建一个新的空 Eloquent 集合

如何在Laravel 4中使用Eloquent Model增加列

Laravel 4.2 Eloquent 获取特定用户和特定角色

Laravel 4:如何将 WHERE 条件应用于 Eloquent 类的所有查询?

如何测试 Laravel 5.4 中的“创建”事件是不是调用了 Eloquent 模型方法?