Laravel Красноречивый ОРМ не может правильно вернуть отношения модели

#laravel #eloquent #orm #relationship

Вопрос:

Я создаю API. В этом репозитории есть метод под названием show (), при котором возвращается контакт. Пользователь должен указать идентификатор контакта и может предоставить массив загружаемых отношений и массив атрибутов контакта, называемых полями.

 return $this->contacts::with($request->relationships)->findOrFail($request->id, $request->fields);
 

Но когда $request->fields это предусмотрено, все отношения возвращают значение null.

Json запроса:

 {
    "id": 75,
    "fields": ["id", "name"],
    "relationships": ["lead", "phone", "email", "address"]
}
 

Ответ Json:

 {
    "id": 75,
    "name": "Edgard Cesar Bertelli dos Reis",
    "lead": null,
    "phone": null,
    "email": null,
    "address": null
}
 

Есть какие-нибудь идеи о том, где я могу ошибаться?

Ответ №1:

Вы должны добавить имена отношений во вторые параметры для findOrFail , в вашем примере это может быть так:

 $fields = array_merge($request->relationships, $request->fields);
return $this->contacts::with($request->relationships)->findOrFail($request->id, $fields);