OrderBy on Eloquent whereHas 关系
OrderBy on Eloquent whereHas relationship
我有一个简单的页面,其中列出了县和标题下的相关项目。这些项目需要 approved
,因此需要 whereHas 方法。
我目前有以下 eloquent 查询;
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1);
})->get();
返回的 items
目前按其主要字段 id
排序(看起来),但我想按 name
字段的字母顺序列出这些项目。
我尝试了以下查询,但这确实改变了一切。任何建议将不胜感激?
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1)->orderBy('name');
})->get();
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1);
})->orderBy('name')->get();
我认为你不能对子查询进行排序,它应该在 ->get
之前
当您想显示结果时,试试这个:
@foreach($counties as $county)
@foreach($county->items->orderBy('name') as $item)
{{ $item->name }}
@endforeach
@endforeach
或在您的县模型中:
public function approvedItems(){
return $this->hasMany(Item::class)->where('approved', 1)->orderBy('name');
}
然后:
控制器:
$counties = County::whereHas('approvedItems')->get();
查看:
@foreach($counties as $county)
@foreach($county->approvedItems as $item)
{{ $item->name }}
@endforeach
@endforeach
尝试使用您的模型和关系来获得尽可能轻的控制器,您将获得灵活性
要保留它 eloquent,你可以把它放在关系中,在模型中 class:
public function reviews()
{
return $this->hasMany(Review::class)->orderBy('id','desc');
}
https://laravel.io/forum/09-14-2015-ordering-a-collection-by-the-related-items
可能会迟到,但希望有人偶然发现了这个(这是 google 搜索中的第一个)
$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');
我有一个简单的页面,其中列出了县和标题下的相关项目。这些项目需要 approved
,因此需要 whereHas 方法。
我目前有以下 eloquent 查询;
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1);
})->get();
返回的 items
目前按其主要字段 id
排序(看起来),但我想按 name
字段的字母顺序列出这些项目。
我尝试了以下查询,但这确实改变了一切。任何建议将不胜感激?
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1)->orderBy('name');
})->get();
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1);
})->orderBy('name')->get();
我认为你不能对子查询进行排序,它应该在 ->get
之前当您想显示结果时,试试这个:
@foreach($counties as $county)
@foreach($county->items->orderBy('name') as $item)
{{ $item->name }}
@endforeach
@endforeach
或在您的县模型中:
public function approvedItems(){
return $this->hasMany(Item::class)->where('approved', 1)->orderBy('name');
}
然后:
控制器:
$counties = County::whereHas('approvedItems')->get();
查看:
@foreach($counties as $county)
@foreach($county->approvedItems as $item)
{{ $item->name }}
@endforeach
@endforeach
尝试使用您的模型和关系来获得尽可能轻的控制器,您将获得灵活性
要保留它 eloquent,你可以把它放在关系中,在模型中 class:
public function reviews()
{
return $this->hasMany(Review::class)->orderBy('id','desc');
}
https://laravel.io/forum/09-14-2015-ordering-a-collection-by-the-related-items
可能会迟到,但希望有人偶然发现了这个(这是 google 搜索中的第一个)
$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');