Laravel |检查用户是否属于所有关系 BelongsToMany
Laravel | Check that user belongs to all relationships BelongsToMany
我正在尝试创建一个更新用户的策略,以确保更新的人或被更新的用户属于 place
。
我有用户的当前数据库结构
| id | first_name | last_name | email | password | created_at | updated_at |
这是地方
| id | name | description | created_at | updated_at |
然后我有一个支点table,它是
| 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 进行比较。如果它不在用户位置上,它将 return 所有请求中不存在的位置 ID。所以检查 diff 是否为空,那么一切都很好,否则 id 无效。
public function belongsToPlaces($placeIds)
{
return collect($placeIds)->diff($this->places()->pluck('id'))->isEmpty();
}
我正在尝试创建一个更新用户的策略,以确保更新的人或被更新的用户属于 place
。
我有用户的当前数据库结构
| id | first_name | last_name | email | password | created_at | updated_at |
这是地方
| id | name | description | created_at | updated_at |
然后我有一个支点table,它是
| 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 进行比较。如果它不在用户位置上,它将 return 所有请求中不存在的位置 ID。所以检查 diff 是否为空,那么一切都很好,否则 id 无效。
public function belongsToPlaces($placeIds)
{
return collect($placeIds)->diff($this->places()->pluck('id'))->isEmpty();
}