我有两个模型:、Bettor、和用户。
这些模型是这样联系在一起的:
对Bettor来说:
public function user()
{
return $this->belongsTo(User::class);
}对于用户:
public function bettors()
{
return $this->hasMany(Bettor::class);
}我有一个疑问:
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
我可以在查询之后对集合进行排序,但它当然不是正确的方法。
那我的错误在哪里?
发布于 2022-08-02 10:27:10
有两件事。
如果你想安排好你们的关系,那么一切都很顺利。你得到的关系数据实际上是被整理好的。
2-如果您希望根据用户的电子邮件对Bettor进行排序,那么:
Bettors::query()->where('bet_id', $bet->id)->with('user')->orderBy(User::select('email)->whereColumn('users.id', 'bettors.user_id'))->get();这将返回基于关系列排序的结果。这个查询所做的是orderBy可以接受子查询,所以我们使用子查询并选择电子邮件列。
发布于 2022-08-02 10:09:30
Bettor::with('user')->where('bet_id', $bet->id)->get()->sortByDesc('user.email');这将在使用集合方法(而不是按MySQL ORDER )紧急加载之后对查询结果进行排序。
https://stackoverflow.com/questions/73205523
复制相似问题