Laravel нетерпеливый вопрос загрузки с findOrFail()


Laravel нетерпеливый вопрос загрузки с findOrFail()

14.05.2016 01:46:28 Просмотров 9 Источник

Почему я должен получить несколько результатов для этого? Мне просто нужны "контакты" для данного идентификатора клиента. Не для всех клиентов.

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

Спасибо,

У вопроса есть решение - Посмотреть?

Ответы - Laravel нетерпеливый вопрос загрузки с findOrFail() / Laravel eager loading issue with findOrFail()

Является ответом!
Joel Hinz

14.05.2016 01:55:32

В принципе, findOrFail() находит для вас один результат вместо того, чтобы возвращать коллекцию. Это означает, что он уже делает для вас вызов get(). Таким образом, вы не можете добавить еще один get() после этого. Если вы это сделаете, то получите странные результаты, как вы заметили, потому что вы, по сути, создаете новый запрос.

Это также означает, что вам не нужно ничего нетерпеливо загружать. Причина, по которой нетерпеливая загрузка хороша, заключается в том, что она позволяет извлекать данные для нескольких объектов в одном запросе. Но у вас все равно есть только один объект - так что это не имеет особого значения.

Вы можете легко сделать просто $client = Client::findOrFail($id);, а затем $client->contacts позже, когда вам понадобятся контакты. Это не сделает вашу работу хуже.

И если вам нужны только контакты, а не клиент, вы можете легко сделать это: $client = Client::findOrFail($id)->contacts;

Juliatzin

24.09.2020 03:01:38

Хотя ответ Джоэла Хинца верен, вы все равно можете иметь нетерпеливую загрузку в этом запросе.

Просто делать:

$client = Client::with('contacts')->findOrFail($id);
Помочь в развитии проекта:
Закрыть X