2016-05-23 27 views
1

我有一個名爲「服務」的模型,另一個名爲「許可證」。服務有許多許可證,並且許可證屬於一項服務。Laravel Eloquent閱讀條目包括關係的最佳實踐

當我想返回所有服務,包括他們的執照我目前做以下

$services = Auth::user()->services; 
foreach($services as $service) { 
    $service->licenses; 
} 

這是工作,但我很想有一些清潔劑,因爲我用這個經常和有時非常深結構。

+0

嘗試:$ services = Services :: all(); –

+0

這不是我想要的。我不想要所有服務,我正在尋找類似「 - > services-> deep」,以便所有關係都返回 –

+1

您可以使用https://laravel.com/docs/5.1/eloquent-relationships#eager-加載。我希望這能幫到您。 –

回答

1

如果您只是試圖加載所有相關記錄,則可以使用預先加載或懶惰預先加載來完成,兩者都接受嵌套關係。

在你的榜樣,因爲你已經有用戶裝載,則可以使用load()方法懶惰貪婪加載相關的記錄:

Auth::user()->load('services.licenses'); 
dd(Auth::user()); 

定期預先加載的工作方式相同:

$user = User::with('services.licenses')->find(Auth::user()->id); 
dd($user); 
+0

如果許可證會有另一種關係 - 是否有一種方法來加載這也使用急於加載? (AUth :: user() - > load('services.licenses.example')? –

+0

@FrankProvost是的,沒有限制嵌套關係的深度(當然除了可用內存)。 – patricus