我正在开发一个API端点,它返回具有所有给定服务ID的用户列表。
就我而言:
我通过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,但我只需要显示拥有端点数组中指定的所有服务的用户。
我所拥有的任何明显原因都没有按预期工作?
答案 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');
}