我有一个简单的页面,列出了县和标题下的相关项目。这些项目必须是approved
,因此是whereHas方法。
我目前有以下雄辩的查询;
$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();
答案 0 :(得分:4)
$counties = County::whereHas('items', function ($query) {
$query->where('approved', 1);
})->orderBy('name')->get();
我不认为你可以在子查询上订购,它应该在 - > get
之前答案 1 :(得分:1)
如果要显示结果,请尝试以下操作:
@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
尝试使用您的模型和关系来拥有最轻的控制器,您将获得灵活性
答案 2 :(得分:1)
$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');
答案 3 :(得分:0)
要保持口才,可以将其放在Model类的关系中:
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搜索中的第一个)