【问题标题】:Laravel 4: how to "order by" using Eloquent ORM [duplicate]Laravel 4:如何使用 Eloquent ORM“排序”[重复]
【发布时间】: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');

标签: php laravel laravel-4 eloquent


【解决方案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'])
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2016-07-01
    • 1970-01-01
    • 2014-01-03
    • 2013-07-07
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多