Jon*_*ger 0 php laravel eloquent
我有Groups,Users,GroupPositions,table.
关系:
用户所属的ToMany Groups
Users areToMany GroupPositions
Group hasMany 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');
}
Run Code Online (Sandbox Code Playgroud)
我需要选择一个组,其中包含成员及其在该特定组中的相应位置.成员可以是具有不同职位的不同组的一部分.他可以成为一个团队的领导者,也可以是不同团队的经理.
目前,我有这个查询:
$group = GroupView::where('tag', $tag)
->with(['user.groupPositions'])
->get();
Run Code Online (Sandbox Code Playgroud)
它给了我所有成员的所有成员的所有职位.我想将其过滤到特定的组.
我也有这个:
$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();
Run Code Online (Sandbox Code Playgroud)
这个工作.但是,问题是我需要通过标签获取组.如果我将所有groupId更改为tag,则它不再起作用.可能是因为groupPositions和我的vw_group_members没有标记列.
所以我的问题是,是否可以通过标签过滤我的查询?
如果GroupPositions每组唯一,您可以with在第一个查询中切换:
$group = GroupView::where('tag', $tag)
->with(['groupPositions.user'])
->get();
Run Code Online (Sandbox Code Playgroud)
这将获得groupPositions组和属于它们的用户.
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |