Laravel Dynamic Eager加载动态关系

时间:2017-11-26 19:47:00

标签: laravel eloquent eager-loading

  • 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条记录。

0 个答案:

没有答案