代码之家  ›  专栏  ›  技术社区  ›  Blues Clues

如何在laravel中使用带sortBy的分页

  •  0
  • Blues Clues  · 技术社区  · 6 年前

    我要做的是:首先,使用 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) 之后 肮脏的 orderBy 方法使其工作,但我无法使用回调函数根据所需的输出对它们进行排序。我怎么用 paginate 脏兮兮的?有什么想法吗?

    User.php

    public function user_profile(){
        return $this->hasOne('Modules\Pages\Models\UserProfile');
    }
    
    
    public function posts(){
        return $this->hasOne('Modules\Pages\Models\Post');
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Jonas Staudenmeir    6 年前

    你必须使用 orderBy() 并加入:

    $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);