[英]Eloquent/Laravel: Nested lazy eager loading, but return multiple model's relations
抱歉,標題不太有意義,但這是我所擁有的以及我想要實現的目標。
餐廳的菜單結構如下:
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('...')
,使其還返回所有商品的價格水平和修飾符嗎?
因此,問題是:可以這樣編寫$ this-> restaurant-> load('...'),使其還返回所有商品的價格水平和修飾符嗎?
當然,只需以與修改器組相同的方式指定價格水平即可:
$this->restaurant->load(
'categories.subcategories.items.modifier_groups_enabled.modifiers_enabled',
'categories.subcategories.items.price_levels'
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.