2016-05-14 6 views

ответ

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

Если у вас есть несколько контактов, просто выполните '@foreach ($ client-> contacts as $ contact)' и оттуда. –

Смежные вопросы