如何在Laravel中对sortBy使用分页

时间:2018-08-13 01:49:20

标签: laravel pagination

我想做的是:首先,使用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');
}

1 个答案:

答案 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);