【发布时间】:2021-11-21 14:54:33
【问题描述】:
我有一个资源集合:
class OverviewResource extends JsonResource
{
public function toArray($request): array
{
return [
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'email' => $this->email,
'phone' => $this->phone,
'friends' => OverviewResource::collection(User::getFriends()),
];
}
}
我在这一行有错误
'friends' => OverviewResource::collection(User::getFriends()),
从用户模型调用此函数时
public static function getFriends(){
return User::where
//query code here
})->get();
}
我收到了这个错误
超出最大堆栈深度
【问题讨论】:
-
我猜是因为 OverViewRessource 的递归调用,但是如何替换它呢?
-
为什么不在User上定义
friends关系,然后简单地修改你的代码为'friends' => $this->friends?您是正确的,对自身的递归调用导致了这个问题???? -
关系已经存在,它返回朋友的 id 然后我搜索具有这些 id 的用户并使用此集合资源返回他们
-
那么它将是
'friends' => $this->getFriends()。无论哪种方式,您都必须在这里重新考虑您的方法????旁注,关系不应该只返回 id,而是从数据库中获取的模型。如果需要,您可以致电$this->friends->pluck('id')获取。 -
嗯,它是如何返回用户对象的,但我希望将用户对象传递给 OverViewResource 以获取补充数据,你现在看到问题了吗?
标签: laravel collections