gpt4 book ai didi

Laravel 与复合非标准外键的关系

转载 作者:行者123 更新时间:2023-12-04 15:32:04 24 4
gpt4 key购买 nike

不幸的是,我需要从第三方供应商导入数据,并在我的 laravel 项目中使用他们的非标准数据库模式。此外,我需要存储多个“公司”,每个公司在我的数据库中都有自己的一组用户。

我试图找出使用 Eloquent 处理这些表之间关系的最佳方法(如果可以的话)。例如,我的表结构如下:

 BmPerson
'id',
'firmId',
'personId'

BmCoverage
'id',
'firmId',
'personId',
'securityId'

BmSecurity
'id',
'firmId',
'securityId'

...例如,我需要通过“BmCoverage”表将“BmPerson”与许多“BmSecurity”相关联。

但是我需要以某种方式使用复合键,因为我在每个表中存储了多个“公司”(根据 3rd 方供应商的数据库架构)。

到目前为止我使用的一种方法是范围界定,例如:对于我的 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 模型关系中使用复合键的好方法,还是我应该坚持使用范围方法?

最佳答案

有一个包裹here这似乎非常适合您的情况:

Compoships offers the ability to specify relationships based on two (or more) columns in Laravel 5's Eloquent. The need to match multiple columns in the definition of an Eloquent relationship often arises when working with third party or pre existing schema/database.



你会像这样使用它:
class BmPerson extends Model
{
use \Awobaz\Compoships\Compoships;

public function bmCoverages()
{
return $this->hasMany('App\BmCoverage', ['firmId', 'personId'], ['firmId', 'personId']);
}
}

如果每 BmSecurity完全属于一个 BmCoverage ,以及每个 BmCoverage完全属于一个 BmPerson它可能更容易更换 'firmId', 'personId'bmperson_idBmCoverage D B;和 'firmId', 'securityId'bmcoverage_idBmSecurity .然后你可以使用默认 hasMany一键关系。

关于Laravel 与复合非标准外键的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com