Laravel - $ query->其中a中的所有ID都匹配

时间:2017-07-18 12:26:51

标签: php laravel laravel-5 eloquent

我正在开发一个API端点,它返回具有所有给定服务ID的用户列表。

就我而言:

  • 用户可以拥有多项服务
  • 表:'用户','服务',' service_user'

我通过Vue JS将数组传递给我的终点,例如:

/endpoint/32,35,38

我的查询目前是:

$servicesArray = explode(',', $services);

$users = User::whereHas('services', function ($query) use ($servicesArray) {
            foreach ($servicesArray as $key => $value) {
                $query->where('id', $value);
            }
        })
        ->get();

问题是它似乎现在返回结果,即使用户确实拥有正确的服务。我的关系很好,如果我只将一个服务传递给端点,它会正确返回分配了该服务的用户。我之前使用过whereIn,但我只需要显示拥有端点数组中指定的所有服务的用户。

我所拥有的任何明显原因都没有按预期工作?

2 个答案:

答案 0 :(得分:1)

我会尝试这样的事情:

$q = User::query();

foreach ($servicesArray as $key => $value) {
    $q->whereHas('services', function ($query) use ($value) {
         $query->where('id', $value);
    });
}

$users = $q->get();

答案 1 :(得分:0)

您还可以使用laravel hasmany realationship函数从其他表中获取多条记录。

示例:

---在您的Controller中使用查询,如。

 $users = User::with('services')->where('id', $value)->get();

---在你的模型类中使用这样的函数服务。

 function services(){
   return $this->hasMany('App\Service','user_id','id');
 }