Laravel中的3种方式关系

时间:2018-09-06 00:08:31

标签: php laravel

我已经竭尽所能地搜索和阅读潜在的解决方案,但是我不能全神贯注于如何做到这一点,所以我希望这里的人能对我有所帮助!

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

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

真实世界的示例:

  • 客户(XYZ公司)拥有这些可用服务(付款,发票,时间跟踪)。
  • 用户(鲍勃)已分配给客户(XYZ公司)
  • 并且对于该特定客户,他可以访问付款和发票服务。

下面的图片是数据库设计(不必完全按照此实现)。

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

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

因此,user_services表可以包含分配给该用户的服务,并带有一个用于client_id的额外字段,以指示向谁分配了服务。

在Eloquent中,用户和服务之间的关系仅是belongsToMany,您需要查询该关系上的客户端ID。简单地:

i  functions: Preparing to emulate functions.
Warning: You're using Node.js v8.4.0 but Google Cloud Functions only supports v6.11.5.
+  functions: hi
+  functions: helloWorld
+  functions: updateMonth
firebase > updateMonth({before:{foo:'old'},after:{foo:'new'}})
'Successfully invoked function.'
firebase > info: User function triggered, starting execution
info: change.after.exists true
info: change.before.exists true
info: Old: { foo: 'old' }
info: Execution took 20 ms, user function completed successfully

firebase > updateMonth({foo:'new'})
'Successfully invoked function.'
firebase > info: User function triggered, starting execution
info: change.after.exists false
change.before.exists false
Old: undefined
Execution took 2 ms, user function completed successfully