php - Laravel 中的三向关系
问题描述
我已经筋疲力尽地搜索和阅读了潜在的解决方案,但我无法理解如何做到这一点,所以我希望这里有人可以帮助我!
我有三个模型:客户、服务和用户。
- 一个客户有很多服务
- 和服务属于许多客户。
- 用户可以通过一个客户端拥有许多服务。
现实世界的例子:
- 客户(XYZ 公司)拥有这些可用的服务(付款、发票、时间跟踪)。
- 用户(Bob)被分配给客户(XYZ 公司)
- 对于该特定客户,他可以访问付款和发票服务。
下图是 DB 设计(不必完全按此实现)。
实现这一点的最佳方法是什么?自定义数据透视表?
解决方案
如果我理解正确,服务是独立分配给用户的,用户不会自动将所有服务都提供给客户端(hasManyThrough)。
因此,user_services 表可以包含分配给该用户的服务,并带有一个额外的 client_id 字段来指示他们是通过谁分配服务的。
Eloquent 中的关系只是用户和服务之间的 belongsToMany,您需要查询该关系上的客户端 ID。简单地:
public function getServices($client) {
return $this->services()->where('client_id', $client->id)->get();
}
推荐阅读
- java - Neo4j 需要更多内存,但“Java 无法为对象堆保留足够的空间”(Windows 10)
- r - 使用 gganimate 向 pdf 文档发出编织问题(不包括动画)
- botframework - 从主动对话返回值
- javascript - 如何检测javascript中的任何kepress
- haskell - 如何在 Haskell 类型签名中从 Lens 指定 At(类似地图的类型)的类型参数?
- c++ - 如何绘制自定义形状的元素?
- r - 在 R 中使用插入符号保存和加载 catboost 模型
- autodesk-forge - Autodesk-Forge 查看您的模型教程模型未上传
- reactjs - 反应数据网格自动完成编辑器为空字段抛出无效的道具错误
- azure - 在创建 VM 时为 VM 指定非默认端口