【问题标题】:Laravel | Check that user belongs to all relationships BelongsToMany拉拉维尔 |检查用户是否属于所有关系 BelongsToMany
【发布时间】:2020-09-26 16:42:57
【问题描述】:

我正在尝试创建一个更新用户的策略,以确保更新的人或被更新的用户属于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。我只是想知道是否有内置方法可以做到这一点?

【问题讨论】:

    标签: laravel eloquent illuminate


    【解决方案1】:

    我会对您已经拥有的 placeId 与用户上的 placeId 进行比较。如果用户位置上不存在,它将返回请求中没有的所有位置 ID。所以检查 diff 是否为空,则一切正常,否则 id 无效。

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

    【讨论】:

    • 感谢这位朋友,没想到这一点!
    • np,链接正确的集合调用有时会很有挑战性,我有时也会想念它们,你在我当前的代码库中的策略中遇到了类似的问题 :)
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2020-02-16
    • 2018-11-05
    • 2022-01-26
    相关资源
    最近更新 更多