Php 在Laravel中,如何将参数传递给所属对象

Php 在Laravel中,如何将参数传递给所属对象,php,laravel,Php,Laravel,我在我的用户模型中有此关系: public function groups() { return $this->belongsToMany('\App\Group', 'role_in_group') ->orderBy('role_id', 'desc'); } 显然,它返回用户所属的组。到目前为止,一切顺利。但是我在组透视表中有一个角色,我想得到用户所属的组,但是有一个特定的角色,所以我编写了另一个函数: public function

我在我的用户模型中有此关系:

public function groups() {
  return $this->belongsToMany('\App\Group', 'role_in_group')
                  ->orderBy('role_id', 'desc');
}
显然,它返回用户所属的组。到目前为止,一切顺利。但是我在组透视表中有一个角色,我想得到用户所属的组,但是有一个特定的角色,所以我编写了另一个函数:

public function groupsAsAdmin() {
  return $this->belongsToMany('\App\Group', 'role_in_group')
                  ->whereIn('role_id', [15, 18, 19])
                  ->orderBy('role_id', 'desc');
}
这是可行的,但我认为这是一个愚蠢的解决方案,我想做一些事情,比如:

public function groups(array $roles_id = NULL) {

  if (empty($roles_id)) {
    $id = [10, 15, 18, 19];
  }

  return $this->belongsToMany('\App\Group', 'role_in_group')
                  ->whereIn('role_id', $id)
                  ->orderBy('role_id', 'desc');
}
我知道这一定行得通。我的问题在模板中

如果我请求$user->groups,它将返回一个集合,这就是我想要的,但是如果我请求$user->groups[19],它将返回一个belongToMany对象,因此它在@foreach中不起作用

这将失败:

@foreach($user->groups([10, 15, 19]) as $group)
   {{ $group->id }}<br>
@endforeach
那么,如何调用模型中的groups函数,并使其返回一个集合,就像在没有括号的情况下调用它一样?除了像我现在这样拥有两个函数之外,还有更好的方法吗?

不使用属性来构建查询

$user->groups()->whereIn('role_id', [10, 15, 19])->get();
或者在使用以下命令获取用户时:


对不起,我不明白,那会放在@foreach里吗?因为这看起来需要标准组,不是吗?这就是我尝试过的,并且成功了!基于你的想法。我使用@foreach$user->groups[10,15,19]->get as$group,因此如何将belongTomany对象转换为集合的答案是调用->get on。谢谢!!!
$users = User::with(['groups' => function($query) {
    return $query->whereIn('role_id', [10, 15, 19]);
}])->get();