2017-02-10 108 views
0

我利用Laravel的Lazy/Eager Loading的雄辯,並遇到了一個有趣的問題。Laravel雄辯5.3渴望/懶惰加載多個限制的相關模型

說明:

  • 的帳戶有很多組,每組有一個優先級編號
  • 所有組包含的項目在他們

問題:

  • 我需要限制手動設置爲每組返回的項目數

  • 這裏的區別是,根據各組的優先級

所以限制數量的變化,例如,雄辯的「選擇」語句將獲得所有三個組,但將組1中返回的項目數量限制爲僅3項,組2至僅8項,組3至17項。

我已經嘗試做的事:

  • 守則控制器到達記錄

    return Account::with([ 
    'group_list.item' 
    ])->where('group_id', $my->group_id) 
    ->orderBy('group_priority_num', 'ASC') 
    ->take(3) <----Gets three groups 
    ->get(['group_priority_num','group_title','group_id']); 
    
  • 組模式

    public function group_list() { 
    
    // Example 
    $this->number = [4 , 7, 15]; 
    
    
    return $this->group()->limit($this->number)->groupBy('user_group_id_fk'); 
    } 
    

這隻會返回1條記錄或根本沒有記錄,所以我目前對如何正確處理這個問題感到困惑。有人可以借我一些指導嗎?

任何援助非常感謝,提前謝謝。 乾杯!

回答

2

通過第二個查詢使用WHERE foreign_key_column IN (list of primary model IDs)進行預先加載。有了這樣的查詢,就不可能爲每個模型設置限制,除非還有其他條件可以進一步過濾結果。

你有3種選擇:

  • 讓能言善辯的渴望負荷一切,根據自己的需要在PHP中篩選結果。
  • 通過僅提取主模型,然後單獨查詢每個模型與其各自的限制之間的關係,執行加載自我的過程。
  • 在您的組表中添加一個標誌列,以便標記應爲每個組返回的行。
+0

可能還有第4種選擇,我會在這裏做一個拉動請求,以增加這種功能......但是開發它需要比我現在需要更多的時間。你說什麼是有道理的。 謝謝你的迴應! 乾杯隊友! –