Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多对多关系中的特定结果_Php_Laravel_Many To Many_Eloquent_Relationship - Fatal编程技术网

Php 多对多关系中的特定结果

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

我希望在这里找到答案, 我有一个组、用户和参与者表,组和参与者通过一对多关系链接到一个用户。 我同意

现在我有一个group_参与者表,它应该将参与者链接到一个组,有3列:

  • 身份证
  • 组id
  • 参与者id
  • 我想做的是获取不属于该组的参与者列表,我可以很容易地获取整个列表,但我想过滤这个列表,以便只获取与该组无关的参与者

    我有点被多对多关系所困扰,我的Group.php模型包含:

        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()
    方法中。