• Laravel版本:5.5

  • PHP版本:7

  • 数据库驱动程序和版本:mysql 5.7

场景:

我有一个具有灵活数据库结构的SaaS应用程序,因此它的字段必然会发生变化,特别是考虑到它有一个Json字段(对于从应用程序的客户端创建的任何额外数据库结构),包括基于关系的字段 . 因此,帐户表可以动态创建employee_id字段,因此需要动态访问关系

问题:

我需要基于这种动态关系的EagerLoad模型 . 如果我有这样的事情:

// Account Model
public function employee(){
    return $this->belongsTo(App\Employee);
}

这很容易 . 但我所拥有的是:

public function modelBelongsTo(){
    return $this->belongsTo($dynamicClassName, $dynamicForeignKey);
}

现在,如果我急切地加载这个,我将获得关键 modelBelongsTo 上的相关Employee的Account Model实例 . 这就是Eloquent Names基于eagerload功能的方式 . 但在此之后我不能再次使用此函数来加载第二个模型,因为它只会覆盖 modelBelongsTo 键上的结果 .

可能的解决方案:

1)我可以以某种方式改变laravel的过程以使用我提供的名称吗?

要么

2)我可以动态编写函数来克服这个问题,所以我会动态编写员工函数吗?

要么

3)最坏情况场景:我遍历所有记录以单独重命名密钥,因为我正在使用分页,循环超过10条记录并不是一件大事 .