【问题标题】:Laravel. OrderBy query with last item hasMany relationship拉拉维尔。 OrderBy 查询与最后一项 hasMany 关系
【发布时间】:2022-01-26 13:33:09
【问题描述】:

在 Laravel(PHP) 上的查询需要一些帮助

我有什么:

两张桌子。 Expedients 和 ExpedientRevs 之间存在 hasMany 关系。

权宜之计:

  public function ExpedientRevs() {
    return $this->hasMany('App\ExpedientRev');
  }

我需要什么: 权宜之计(Distinct Expedient)订单DESC的列表,按最后的权宜之计修订(ExpedientRev的last id)

我的意思是,如果我有 ExpedientRev:

id     expedient_id  ..........
---   --------------
1         1
2         2
3         3
4         3
5         1

我的结果应该是这个顺序的权宜之计:1,3,2(没有重复的权宜之计)

任何帮助将不胜感激 谢谢

【问题讨论】:

    标签: php mysql sql laravel eloquent


    【解决方案1】:

    最简单的方法;

    $expedients = Expedient::orderByDesc(ExpedientRev::select('id')
        ->whereColumn('expedient_revs.expedient_id', 'expedients.id')
        ->latest()
        ->take(1)
    )->get();
    

    这将获得ExpedientRev 模型的最新记录。如果您想在结果中包含 ExpedientRev。您可以使用 latestOfMany。

    在你的 Expedients 模型中添加这个;

    public function rev()
    {
            return $this->hasOne(ExpedientRev::class)->latestOfMany();
    }
    

    所以你可以这样使用;

    $expedients = Expedient::orderByDesc(ExpedientRev::select('id')
        ->whereColumn('expedient_revs.expedient_id', 'expedients.id')
        ->latest()
        ->take(1)
    )->with('rev')->get();
    

    【讨论】:

    • 感谢您的回答!第一部分就像一个魅力。遗憾的是,第二个不起作用,因为项目是 Laravel 6.2,我在这个版本中找不到“latestofmany”功能。但无论如何都有很大的帮助
    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2018-11-05
    相关资源
    最近更新 更多