Php 多对多关系中的特定结果
我希望在这里找到答案, 我有一个组、用户和参与者表,组和参与者通过一对多关系链接到一个用户。 我同意 现在我有一个group_参与者表,它应该将参与者链接到一个组,有3列:Php 多对多关系中的特定结果,php,laravel,many-to-many,eloquent,relationship,Php,Laravel,Many To Many,Eloquent,Relationship,我希望在这里找到答案, 我有一个组、用户和参与者表,组和参与者通过一对多关系链接到一个用户。 我同意 现在我有一个group_参与者表,它应该将参与者链接到一个组,有3列: 身份证 组id 参与者id 我想做的是获取不属于该组的参与者列表,我可以很容易地获取整个列表,但我想过滤这个列表,以便只获取与该组无关的参与者 我有点被多对多关系所困扰,我的Group.php模型包含: public function participantsGroup() { return $this-&g
public function participantsGroup()
{
return $this->belongsToMany('App\Participant');
}
如果我这样做:
public function participants(){
$group = Group::find('group_id_there')->participantsGroup;
return $group;
}
我正在获取与此组相关的参与者列表,但我想要的是与此相反的结果,请告诉我如何才能做到这一点?要实现这一点,您应该使用
whereNotIn()
方法,并传递当前参与者的数组。例如:
// Fetch the participants in the group
$groupParticipantsId = Group::find(1)->participantsGroup()->lists('participant_id');
// Query to get all participants that are not in that group
$participantsNotInGroup = App\Participant::whereNotIn($groupParticipantsId)->get();
最佳做法是在类上创建一个对您更有意义的范围,我将在App\Participant
类上创建范围:
public function scopeNotInGroup($query, App\Group $group) {
$participants = $group->participantsGroup()->lists('participant_id');
return $query->whereNotIn($participants);
}
然后,您可以在应用程序中的任何位置执行以下操作:
// Fetch the participants in the group
$group = Group::find(1);
// Query to get all participants that are not in that group
$participantsNotInGroup = App\Participant::notInGroup($group)->get();
@阿齐汉很高兴这有帮助!如果这是正确答案,请将其标记为好答案,并投票表决!)是的,谢谢,我还有最后一个小问题,最后一个问题。组与参与者一样链接到用户,因此此解决方案显示所有未链接到特定用户的参与者事件,与参与者表的用户id无关。所以最完美的方法是显示我想要的用户的参与者,我不知道我是否解释得很好。我想我明白了,你是说用户拥有的所有不属于特定组的参与者?您能否指定用户
、组
和参与者
表之间的关系,需要这些信息来帮助您进行查询。当然,我有一对多的组表与管理员id的用户相关,参与者与用户id的用户相关。因此,我得到的列表包含所有与user_id无关的参与者,理想情况下,如果我有一个id为1的组,它与admin_id 5有关(这是一个示例),我只希望得到具有user_id 5的参与者。希望你明白我的意思当然!有很多不同的方法可以做到这一点。实现这一点的最简单方法是向调用添加where()
方法,类似这样:App\Participant::notInGroup($group)->where('user\u id',$group->admin\u id)->get()代码>。请记住,如果这是您最后经常做的事情,您可能希望将其提取到范围
,或者将其添加到scopenotinggroup()
方法中。