Muh*_*cha 6 eager-loading laravel eloquent
我有一个具有灵活数据库结构的 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 条记录并不是什么大问题。
小智 0
我们定义了各种动态类名的变形关系
Employee
Boss
Run Code Online (Sandbox Code Playgroud)
Morph 的工作原理是将相关键和表名存储在父表中,这意味着要将它们关联起来,您必须使用联接或 orm,并且不能对其进行外键约束,因为它链接到不同的表。
然后让您的帐户与我们一样变形
Account
Run Code Online (Sandbox Code Playgroud)
作为顶级,那么我们有
EmployeeAccount, BossAccount
Run Code Online (Sandbox Code Playgroud)
与老板和员工有关系
然后在帐户中有变形关系调用它,specificAccount()
在其子变形中具有与帐户的变形关系
然后将其添加到 $with 以便立即加载它们,以便在获取帐户时您可以简单地执行以下操作
$帐户->特定帐户
得到它的变形孩子。可以为空
这是完全动态的,这样如果您将来有其他类,您只需添加并添加变形关系即可。这可以应用于任何反射或运行时评估和加载的类/代码,尽管不建议这样做,因为您始终可以编辑代码来创建新功能而不影响以前的功能。
归档时间: |
|
查看次数: |
668 次 |
最近记录: |