小编Muh*_*cha的帖子

用于动态关系的 Laravel 动态预加载

  • Laravel 版本:5.5
  • PHP 版本:7+
  • 数据库驱动及版本:mysql 5.7+

设想:

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

问题:

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

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

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

public function modelBelongsTo(){
    return $this->belongsTo($dynamicClassName, $dynamicForeignKey);
}
Run Code Online (Sandbox Code Playgroud)

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

可能的解决方案方向:

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

或者

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

或者

3)最坏情况:我遍历所有记录以单独重命名它们的键,因为我使用的是分页,循环超过 10 条记录并不是什么大问题。

eager-loading laravel eloquent

6
推荐指数
1
解决办法
668
查看次数

标签 统计

eager-loading ×1

eloquent ×1

laravel ×1