2016-05-14 125 views
2

爲什麼我會得到多個結果呢?我只想要給定客戶端ID的「聯繫人」。不適合所有客戶。Laravel急切加載問題findOrFail()

public function edit($id) 
{ 
    $client = Client::findOrFail($id)->with('contacts')->get(); 
} 

感謝,

回答

2

基本上,findOrFail()發現一個結果給你,而不是返回集合。這意味着它已經爲您撥打了get()電話。所以你不能再添加另一個get()。如果你這樣做,你會發現奇怪的結果,因爲你基本上正在建立一個新的查詢。

這也意味着你不需要加載任何東西。渴望加載的原因很好,因爲它允許您在單個查詢中爲多個對象提取數據。但是,無論如何,你只有一個對象 - 所以它並不重要。

稍後,當您需要聯繫人時,您可以輕鬆完成$client = Client::findOrFail($id);然後$client->contacts。它不會讓你的表現更糟糕。

如果你只想要接觸,而不是客戶端,你可以很容易地做到這一點:$client = Client::findOrFail($id)->contacts;

+0

很真實,我bascly問同樣的問題前一段時間,findorfail將eagerload不使用 - >使用(至少在我的情況)無論如何,我的事情可能是這樣的工作Client :: with('contacts') - > findOrFail($ id); –

+0

謝謝,我如何訪問blade.view內的「聯繫人」? '{{Form :: model($ client,... {!! Form :: text('contact-> name',null,array('class'=>'form-control'))!!} ' – fabian

+0

If你有多個聯繫人,只需做一個'@foreach($ client-> contacts as $ contact)'並從那裏開始。 –