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

我正在尝试找出使用Eloquent来处理这些表之间的关系的最佳方法(如果可以做到)。因此,例如,我的表结构如下:

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

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

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

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

但是我需要以某种方式使用组合键,因为我在每个表中存储了多个“公司”(按第三方供应商的数据库模式)。

到目前为止,我使用的一种方法是范围界定,例如:对于我的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似乎很适合您的情况:



您可以这样使用它:

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' DB中用bmperson_id替换BmCoverage可能更容易;和'firmId', 'securityId'bmcoverage_id中的BmSecurity。然后,您可以通过一个键使用默认的hasMany关系。

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

10-13 04:48