【发布时间】:2016-11-12 21:38:27
【问题描述】:
不幸的是,我需要从第三方供应商导入数据,并在我的 laravel 项目中使用他们的非标准数据库架构。此外,我需要在我的数据库中存储多个“公司”,每个公司都有自己的一组用户。
我正在尝试找出使用 Eloquent 处理这些表之间关系的最佳方法(如果可以的话)。例如,我的表结构是这样的:
BmPerson
'id',
'firmId',
'personId'
BmCoverage
'id',
'firmId',
'personId',
'securityId'
BmSecurity
'id',
'firmId',
'securityId'
...例如,我需要通过“BmCoverage”表将“BmPerson”与许多“BmSecurity”相关联。
但我需要以某种方式使用复合键,因为我在每个表中存储了多个“公司”(根据第 3 方供应商的数据库架构)。
到目前为止,我使用的一种方法是范围界定,例如:对于我的 BmCoverage 模型:
public function scopeFromFirm($query,$firmId){
return $query->where('firmId','=',$firmId);//->where('personId','=',$personId);}
public function scopeFromPerson($query,$personId){
return $query->where('personId','=',$personId);//->where('personId','=',$personId);}
然后我可以检索个人的保险范围列表,但我仍然需要以某种方式将“BmCoverage”与“BmSecurities”相关联。我想我也可以在 BmSecurities 类中添加一个范围,但使用 Eloquent 会更好。
有没有人想出在 laravel 模型关系中使用复合键的好方法,还是我应该坚持使用作用域方法?
【问题讨论】:
-
你的模型关系是什么样的?
-
为什么你有 2 个 BmCoverage?。
-
抱歉,我已经删除了第二个 - 是重复的。现在我无法关联这些模型,因为我需要跨 2 个键来关联(例如,在将 BmPerson 与 BmCoverage 关联的情况下,firmId 和 personId)。那有意义吗?我有一个唯一的 id 列,但我需要能够基于 2 个键而不是一个键进行关联。
-
这是另一种表述方式:我使用的第三方供应商供应品,例如“firmId”和“securityId”。但是,securityIds 可以重复。所以firmId 1 可以有securityIds 1,2,3。 FirmId 2 也可以有 securityIds 1,2,3。现在我将证券存储在一个表中,firmIds 在一个单独的列中,这不适用于 laravel 的关系工具。有没有办法可以更改数据库结构以使其兼容,或者我应该将其保留为复合键并使用手动查询?谢谢。
-
虽然 BmCoverage 是枢轴模型,您可以使用 laravel.com/docs/5.0/eloquent#working-with-pivot-tables,但我会使用查询范围概念 laravel.com/docs/5.2/eloquent#query-scopes
标签: laravel