首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何排序此查询的结果

问如何排序此查询的结果
EN

Stack Overflow用户
提问于 2022-08-02 09:55:38
回答 2查看 66关注 0票数 0

我有两个模型:、Bettor、和用户。

这些模型是这样联系在一起的:

对Bettor来说:

代码语言:javascript
复制
public function user()
{
    return $this->belongsTo(User::class);
}

对于用户:

代码语言:javascript
复制
public function bettors()
{
    return $this->hasMany(Bettor::class);
}

我有一个疑问:

代码语言:javascript
复制
return Bettor::where('bet_id', $bet->id)
    ->with(['user' => function ($query) {
        $query->orderBy('email');
    }])
    ->get();

结果并没有将用户与他们的电子邮件排序。但是,当我在这里阅读文档时,可以这样做:

https://laravel.com/docs/9.x/eloquent-relationships#constraining-eager-loads

我可以在查询之后对集合进行排序,但它当然不是正确的方法。

那我的错误在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-02 10:27:10

有两件事。

如果你想安排好你们的关系,那么一切都很顺利。你得到的关系数据实际上是被整理好的。

2-如果您希望根据用户的电子邮件对Bettor进行排序,那么:

代码语言:javascript
复制
Bettors::query()->where('bet_id', $bet->id)->with('user')->orderBy(User::select('email)->whereColumn('users.id', 'bettors.user_id'))->get();

这将返回基于关系列排序的结果。这个查询所做的是orderBy可以接受子查询,所以我们使用子查询并选择电子邮件列。

票数 1
EN

Stack Overflow用户

发布于 2022-08-02 10:09:30

代码语言:javascript
复制
Bettor::with('user')->where('bet_id', $bet->id)->get()->sortByDesc('user.email');

这将在使用集合方法(而不是按MySQL ORDER )紧急加载之后对查询结果进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73205523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档