簡體   English   中英

Eloquent / Laravel:嵌套的延遲渴望加載,但返回多個模型的關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM