Php Laravel:相关表中的Orderby和

Php Laravel:相关表中的Orderby和,php,laravel,sql-order-by,relation,laravel-eloquent,Php,Laravel,Sql Order By,Relation,Laravel Eloquent,这是我的模型 使用者 角色 这些模型之间的关系是多对多的 我想创建如下查询: return User::with('roles')->orderBy('roles.id')->paginate(); return User::with(['roles' => function ($query) { $query->orderBy('id', 'desc'); }])->paginate(); return User::with('r

这是我的模型

  • 使用者
  • 角色
这些模型之间的关系是多对多的

我想创建如下查询:

return User::with('roles')->orderBy('roles.id')->paginate();
return User::with(['roles'  => function ($query) {
        $query->orderBy('id', 'desc');
    }])->paginate();
return User::with('roles')
    ->join('roles', 'user.id', '=', 'roles.user_id')
    ->orderBy('roles.id', 'desc')
    ->paginate();

我不想加入,因为我为每个模型都创建了一个基类。我也不想在
get
之后使用
orderBy
,因为它必须加载我的所有数据,然后我应该能够对其进行排序和分页。所以这不是一个好主意

您可以尝试以下方法:

return User::with('roles')->orderBy('roles.id')->paginate();
User::where('role_id','!=','0')->orderBy('role_id','DESC')->paginate(10);
return User::with(['roles'  => function ($query) {
        $query->orderBy('id', 'desc');
    }])->paginate();
return User::with('roles')
    ->join('roles', 'user.id', '=', 'roles.user_id')
    ->orderBy('roles.id', 'desc')
    ->paginate();
但这只会对“急切加载”属性进行排序,但如果您有兴趣使用join,则可以使用以下内容:

return User::with('roles')->orderBy('roles.id')->paginate();
return User::with(['roles'  => function ($query) {
        $query->orderBy('id', 'desc');
    }])->paginate();
return User::with('roles')
    ->join('roles', 'user.id', '=', 'roles.user_id')
    ->orderBy('roles.id', 'desc')
    ->paginate();
在这种情况下,您可以轻松地使用您主要关心的
分页


希望这有帮助。

如果没有加入,这是不可能的(AFAIK)。通常最好解释一个解决方案,而不是仅仅发布几行匿名代码。你可以阅读,也可以阅读。