首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉勒维尔雄辩地按角色名称对关系模式进行排序

拉勒维尔雄辩地按角色名称对关系模式进行排序
EN

Stack Overflow用户
提问于 2020-04-13 14:57:48
回答 1查看 1.2K关注 0票数 0

我遇到了一个问题,我必须根据他们的关系数据来排序/订购一组模型。

我把它设置成这样:

模型:UserTeamTeamUserRole

TeamUser模型是一个枢轴模型/表(包含user_idteam_id )。如果值得一提的话,我也在使用空间/拉拉-权限作为角色。

当我想按照用户的role.name对团队中的用户进行排序时,我会怎么做呢?我正在讨论users()模型中的Team关系(请参阅下面的代码示例)。一些用户拥有角色team-leader,而大多数用户具有角色team-seller。我试过做一个普通的..->sortBy('role.name'),但这似乎行不通。如果有人能帮我的话,先谢谢你。

User.php

代码语言:javascript
复制
/**
 * Team relation
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function team()
{
    return $this->belongsToMany('App\Team', 'team_users', 'user_id', 'team_id');
}

Team.php

代码语言:javascript
复制
/**
 * User relation
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function users()
{
    return $this->belongsToMany('App\User', 'team_users', 'team_id', 'user_id')->withTimestamps();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 18:50:52

如果要根据嵌套关系列对结果排序,则必须使用联接链:

代码语言:javascript
复制
$values = Team::query()
      ->leftJoin('users', 'users.team_id', '=', 'teams.id')
      ->leftJoin('model_has_roles', function ($join) {
          $join->on('model_has_roles.model_id', '=', 'users.id')
               ->where('model_has_roles.model_type', '=', 'app\Models\User');
      })
      ->leftJoin('roles', 'roles.id', '=', 'model_has_roles.role_id')
      ->orderBy('roles.name')
      ->get();

我试过了,效果很好。

请注意,如果您希望按多个列进行排序,您可以根据需要添加“orderBy”子句:

代码语言:javascript
复制
->orderBy('roles.name', 'DESC')->orderby('teams.name', 'ASC') //... ext
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61190637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档