我有两个模型: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
];
}
我想要实现的是,当我拥有公司时,我希望得到他们的代表。当我获得代表时,我想获取有关公司的信息。
发生的是无限循环:它们无限地相互包含。
那么,如何解决?
答案 0 :(得分:1)
您尝试使用whenLoaded
吗? here已记录在案,我认为它符合您的需求。
使用您的代码,您应该具有以下内容:
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());