我想做的是:首先,使用laravel中的sortBy
方法对集合的结果进行排序,如下所示:
$users = User::with('user_profile', 'posts')
->whereHas('roles', function($query){
return $query->where('slug', 'moderator');
})->get()
->sortBy(function($user){
return $user->user_profile->country . " - " . $user->posts->name;
});
现在,当我在paginate(10)
方法之后使用sortBy
时,它将返回错误。我也尝试使用orderBy
方法来使其工作,但是我无法使用回调函数根据所需的输出对它们进行排序。如何在sortBy中使用paginate
?有什么想法吗?
更新1
User.php
public function user_profile(){
return $this->hasOne('Modules\Pages\Models\UserProfile');
}
public function posts(){
return $this->hasOne('Modules\Pages\Models\Post');
}
答案 0 :(得分:0)
您必须使用orderBy()
和JOIN:
$users = User::select('users.*')
->join('user_profiles', 'user_profiles.user_id', '=', 'users.id')
->join('posts', 'posts.user_id', '=', 'users.id')
->whereHas('roles', function($query){
$query->where('slug', 'moderator');
})
->orderByRaw("concat(user_profiles.country, ' - ', posts.name)")
->paginate(10);