【发布时间】:2016-11-25 09:49:46
【问题描述】:
我开发了一个系统,其中各种类具有由自定义公式组成的属性。该公式可以包含引用不同类型对象的特殊标记。例如 FruitSalad 类的对象可能具有以下属性;
$contents = "[A12] + [B76]";
在有些抽象的术语中,这意味着“将苹果 12 添加到香蕉 76”。与在一个公式中涉及多达 15 或 20 个对其他对象的引用相比,它也可能变得更加复杂。
我有一个特征可以传递这样的公式,每次它找到对模型的引用(即“[A12]”)时,它都会使用 A::find(12) 从数据库中获取它并将其添加到组件对象数组,可用于稍后在请求中的其他进程。
所以,本质上,这是一种关系。但不是使用数据透视表来描述关系,而是在父模型上有一个公式,其中可以包含对子模型的引用。
这一切正常。耶!但这确实效率低下,因为在解析公式时有太多微小的查询来获取单个模型。一个请求可能很容易导致数百个查询。哎呀。
我看到了两个潜在的选择; 1. 在请求开始时从数据库中获取我所有的苹果和香蕉,并在解析公式时从内存存储而不是从数据库中获取它们(这是存储库模式吗??)。 2. 创建一个自定义关系类型(类似于 hasManyFromFormula),它可以使预加载工作,从而使解析变得更加简单,因为相关的苹果和香蕉已经加载到父模型中。
这有先例吗?至于我为什么要这样做,简要解释起来有点困难,但只要说它支持一个高度可配置的数据检索系统就足够了,它支持未知的输入数据配置。
帮助!
谢谢, 杰夫
【问题讨论】:
标签: laravel laravel-5 eloquent relationship