道歉,如果标题没有多大意义,但这就是我所拥有的以及我想要实现的目标。
有一个餐厅的菜单,其结构如下:
Restaurant
|- category 1
|- subcategory 1
|- subcategory 2
|- item 1
* price levels:
|- price level 1
|- price level 2
* modifiers groups:
|- group 1
|- modifier 1
|- modifier 2
目标是编写最有效的方式(就数据库查询而言)以获取整个菜单(通过API作为JSON),但有一个问题:我需要每个项目的价格水平和修饰符。
我提出的最有效的方法是:
第1部分:链条一直到项目的修饰符(因为它们比价格水平更嵌套):
$this->restaurant->load('categories.subcategories.items.modifier_groups_enabled.modifiers_enabled');
第2部分:
在通过类别/子类别/项目开始循环之前,我“手动”获取属于餐馆中所有项目的所有价格水平,然后我将它们放入一个数组,按项目的ID分组。然后,在循环浏览菜单时,我只是将$price_levels[$item->id]
作为项目价格水平的数组。
没有任何缓存,整个请求在7个查询中完成,这没关系,但准备价格水平的“肮脏”方式让我感到烦恼:)
如果我将嵌套的热切加载仅限于项目,则获取每个项目的价格水平和修饰符($item->load[...]
),数据库查询堆积起来,因为每个项目运行自己的项目以获得价格水平和修改器组/改性剂。
所以,问题是:$this->restaurant->load('...')
可以用这样的方式写出它还能返回所有商品的价格水平和修饰符吗?
答案 0 :(得分:1)
所以,问题是:可以$ this-> restaurant->加载(' ...')以这样的方式写入它也会返回所有项目'价格水平和修饰符?
当然,只需以与修饰符组相同的方式指定价格水平:
$this->restaurant->load(
'categories.subcategories.items.modifier_groups_enabled.modifiers_enabled',
'categories.subcategories.items.price_levels'
);