我遇到了一个问题,我必须根据他们的关系数据来排序/订购一组模型。
我把它设置成这样:
模型:User,Team,TeamUser,Role
TeamUser模型是一个枢轴模型/表(包含user_id和team_id )。如果值得一提的话,我也在使用空间/拉拉-权限作为角色。
当我想按照用户的role.name对团队中的用户进行排序时,我会怎么做呢?我正在讨论users()模型中的Team关系(请参阅下面的代码示例)。一些用户拥有角色team-leader,而大多数用户具有角色team-seller。我试过做一个普通的..->sortBy('role.name'),但这似乎行不通。如果有人能帮我的话,先谢谢你。
User.php
/**
* Team relation
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function team()
{
return $this->belongsToMany('App\Team', 'team_users', 'user_id', 'team_id');
}Team.php
/**
* User relation
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function users()
{
return $this->belongsToMany('App\User', 'team_users', 'team_id', 'user_id')->withTimestamps();
}发布于 2020-04-13 18:50:52
如果要根据嵌套关系列对结果排序,则必须使用联接链:
$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”子句:
->orderBy('roles.name', 'DESC')->orderby('teams.name', 'ASC') //... exthttps://stackoverflow.com/questions/61190637
复制相似问题