Php Laravel中的三方关系

Php Laravel中的三方关系,php,laravel,Php,Laravel,我已经穷尽了寻找和阅读潜在的解决方案,但我不知道该怎么做,所以我希望这里的人能帮助我 我有三种模式:客户、服务和用户 客户机有许多服务 和服务属于许多客户 用户可以通过客户端获得许多服务 现实世界的例子: 客户(XYZ公司)拥有这些可用服务(付款、开票、时间跟踪) 将用户(Bob)分配给客户(XYZ公司) 对于这个特定的客户,他可以访问支付和发票服务 下图是DB设计(它不必像这样实现) 实现这一点的最佳方法是什么?定制透视表 你们的关系真的需要这么复杂吗?是否曾经有过这样的情况:用户被分

我已经穷尽了寻找和阅读潜在的解决方案,但我不知道该怎么做,所以我希望这里的人能帮助我

我有三种模式:客户、服务和用户

  • 客户机有许多服务
  • 和服务属于许多客户
  • 用户可以通过客户端获得许多服务
现实世界的例子:

  • 客户(XYZ公司)拥有这些可用服务(付款、开票、时间跟踪)
  • 将用户(Bob)分配给客户(XYZ公司)
  • 对于这个特定的客户,他可以访问支付和发票服务
下图是DB设计(它不必像这样实现)

实现这一点的最佳方法是什么?定制透视表


你们的关系真的需要这么复杂吗?是否曾经有过这样的情况:用户被分配了一个客户端,但没有任何服务


如果没有,那么这只是ClientServices和Users表之间的简单多对多关系,您可以删除UserClient表。

如果我理解正确,服务是独立分配给用户的,用户不会自动将所有服务提供给客户端(hasManyThrough)

因此,user\u services表可以包含分配给该用户的服务,并为client\u id添加一个额外字段,以指示通过谁分配了服务

雄辩的关系只是用户和服务之间的关系,您需要查询该关系的客户id。简单地说:

public function getServices($client) {
    return $this->services()->where('client_id', $client->id)->get();
}

当前的实施存在什么问题?感谢您的解决方案。这样做的问题是我不能再这样做:$user->clients->services$user->clients应该是相关客户机模型的集合,而不是表示用户-客户机关系的对象。(本质上,Client::get()和$user->clients中的对象应该是同一类型的)您正在寻找表示UserClient关系的模型吗?我想那是可能的,但我从来没有做过。您通常没有数据透视表的模型。