拉拉维尔 |检查用户是否属于所有关系 属于多



我正在尝试创建一个更新用户的策略,以确保更新人员或正在更新的用户属于place

我有用户的当前数据库结构

| id | first_name | last_name | email | password | created_at | updated_at |

这就是地方

| id | name | description | created_at | updated_at | 

然后我有一个数据透视表,它是

| user_id | place_id |

一切都正确链接,我可以将数据传递和关联到每个模型中。

我试图实现的是,当我根据JSON API规范发送请求时

,如下所示:
{
"type": "users",
"attributes": {
...
},
"relationships": {
"places": {
"data": [
{
"type": "places",
"id": "1"
},
{
"type": "places",
"id": "2"
}   
]
}
}
}

在更新的策略中,我想检查经过身份验证的用户或正在更新的用户是否属于该位置。

我在User模型上有一种方法如下:

public function belongsToPlaces($placeIds) 
{
return $this->places()->whereIn('id', $placeIds)->count() === count($placeIds);
}

这似乎有效,但它真的感觉不是很安全,因为实际上我应该检查每个 ID。我只是想知道是否有内置方法可以做到这一点?

我会对你已经拥有的 placeId 与用户上的 placeId 做一个差异。它将返回请求中不存在的所有地点 ID(如果用户地点上不存在(。因此,请检查差异是否为空,然后一切正常,否则id无效。

public function belongsToPlaces($placeIds) 
{
return collect($placeIds)->diff($this->places()->pluck('id'))->isEmpty();
}

相关内容

  • 没有找到相关文章

最新更新