首页 文章

过滤laravel雄辩的关系

提问于
浏览
0

我有Groups,Users,GroupPositions,table .

Relationship:
用户所属的ToMany Groups
用户所属的ToMany GroupPositions
集团拥有多个集团职位

//users
public function groupPositions() {
return $this->belongsToMany(
    'App\Models\GroupPositionView',
    'vw_group_members',
    'userId',
    'groupPositionId');
}

public function groups() {
return $this->belongsToMany(
    'App\Models\GroupView',
    'vw_group_members',
    'userId',
    'groupId');
}

我需要选择一个组,其中包含成员及其在该特定组中的相应位置 . 成员可以是具有不同职位的不同组的一部分 . 他可以成为一个团队的领导者,也可以是不同团队的经理 .

目前,我有这个查询:

$group = GroupView::where('tag', $tag)
->with(['user.groupPositions'])
->get();

它给了我所有成员的所有成员的所有职位 . 我想将其过滤到特定的组 .

我也有这个:

$groupId = 1;
$group = GroupView::with(['users.groupPositions' => function($query) use($groupId) {
    $query->whereHas('group', function($query) use($groupId) {
        $query->where('groupId', $groupId);
    });
}])
->where('groupId', $groupId)
->firstOrFail();

这个工作 . 但是,问题是 I need to get the group via tag. 如果我将所有groupId更改为tag,它将不再起作用 . 可能是因为groupPositions和我的vw_group_members没有标记列 .

所以我的问题是,是否可以通过标签过滤我的查询?

2 回答

  • 8

    如果GroupPositions每组唯一,您可以在第一个查询中切换 with

    $group = GroupView::where('tag', $tag)
        ->with(['groupPositions.user'])
        ->get();
    

    这将获取组的 groupPositions 和属于它们的用户 .

  • 0
    $group = GroupView::where('tag', $tag)->with(['groupPositions.user'])->get();
    

    归功于@Teun

相关问题