2016-05-14 106 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)'并从那里开始。 –