-
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条记录并不是一件大事 .