我已经在互联网上阅读了很多相关内容,但它看起来像是一个不同的问题。所以...我拥有的是:
$students = User::with('user_profile')
->whereHas('roles', function($query){
return $query->where('slug', 'student');
})->get()
->sortBy(function($user){
return $user->user_profile->country;
});
是的,这可以用来按国家排序students
,但是如果他们有相同的国家/地区,我想要排序的第二个字段是他们的名字,所以我尝试了这个:
$students = User::with('user_profile')
->whereHas('roles', function($query){
return $query->where('slug', 'student');
})->get()
->sortBy(function($user){
return $user->user_profile->country;
})
->sortBy(function($user){
return $user->user_profile->first_name;
});
然后尝试更改国家/地区,现在,它只能排序名字而不是国家/地区(这是我在第一个名称之前排序的优先级字段)。
顺便说一下,我正在使用Laravel 5.1
干杯!
答案 0 :(得分:0)
这有点违反直觉,但是当您在Eloquent中链接sortBy时,它们会被反向应用。 因此,您的示例代码实际上是"按名字排序,然后按国家/地区排序"。
其他可能的解决方案是连接您要排序的两个字段:
$students = User::with('user_profile')
->whereHas('roles', function($query){
return $query->where('slug', 'student');
})->get()
->sortBy(function($user){
return $user->user_profile->country . "-". $user->user_profile->first_name;
})