У меня две модели: Company и Representative. Представитель принадлежит компании, у компании много представителей.
Также у меня есть два соответствующих ресурса.
Ресурс компании:
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'representatives' => RepresentativeResource::collection($this->representatives)
];
}
Представительский ресурс:
public function toArray($request)
{
return [
'id' => $this->id,
'company' => $this->company ? new CompanyResource($this->company) : null
];
}
Чего я хочу добиться, так это когда я получаю компании, я хочу иметь их представителей. Когда я получаю представителя, я хочу получить информацию о компании.
Происходит бесконечный цикл: они включают друг друга бесконечно.
Итак, как это исправить?






Вы пробовали использовать whenLoaded? Он задокументирован как здесь, и я думаю, что он соответствует вашим потребностям.
С вашим кодом у вас должно получиться что-то вроде этого:
class CompanyResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'representatives' => RepresentativeResource::collection(
$this->whenLoaded('representatives')
)
];
}
}
class RepresentativeResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'company' => new CompanyResource(
$this->whenLoaded('company')
)
];
}
}
Затем в вашем контроллере вам нужно будет загрузить отношения с вашей моделью.
new RepresentativeResource(Representative::with('company')->first());
Большое спасибо. Единственное, чего я не мог понять, это то, что если я извлекаю компанию, она возвращает ее представителей, и каждый представитель содержит компанию (даже если я загружаю компании в свой контроллер, используя -> with ('members'), а не -> with ( 'members.company')). Таким образом, я получаю много данных, которые не используются (поскольку я уже знаю, с какой компанией я работаю)
Потребовалось время, чтобы найти этот вопрос и ответ, но это была именно наша проблема и решение. Спасибо!
Сначала вам нужно определить бизнес-логику. Какие данные вам нужны и зачем? Затем идет код