Laravel的3种关系

问题描述 投票:2回答:2

我已经筋疲力尽地寻找和阅读潜在的解决方案,但我无法理解如何做到这一点,所以我希望有人可以帮助我!

我有三个模型:客户端,服务和用户。

  • 客户有很多服务
  • 和服务属于许多客户。
  • 用户可以通过客户端获得许多服务。

现实世界的例子:

  • 客户(XYZ公司)拥有这些可用的服务(付款,发票,时间跟踪)。
  • 用户(Bob)被分配给客户(公司XYZ)
  • 对于这个特定的客户,他可以访问付款和发票服务。

下图是数据库设计(不必像这样完全实现)。

实现这一目标的最佳方法是什么?自定义数据透视表?

enter image description here

php laravel
2个回答
1
投票

你的关系真的需要那么复杂吗?是否曾经有过为用户分配客户但没有任何服务的情况?

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


1
投票

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

因此,user_services表可以包含分配给该用户的服务,client_id的额外字段用于指示通过哪个服务分配给他们。

Eloquent中的关系只是属于用户和服务之间的关系,您需要查询该关系上的客户端ID。只是:

public function getServices($client) {
    return $this->services()->where('client_id', $client->id)->get();
}
© www.soinside.com 2019 - 2024. All rights reserved.