我有 2 个模型,用户和部门。这两者之间有着多对多的关系。当我尝试在 Model 类中将字段与toArray()方法相关联时,出现最大堆栈深度超出错误。部门型号 :class Department extends Model{ public function users() { return $this->belongsToMany(User::class); } public function toArray() { $arr = parent::toArray(); $arr['users'] = $this->users; return $arr; }}用户模型:class User extends Model{ public function departments() { return $this->belongsToMany(Department::class); } public function toArray() { $arr = parent::toArray(); $arr['departments'] = $this->departments; return $arr; }}拥有这种 JSON 输出的正确方法是什么?/api/部门:{ "success": true, "data": [ { "id": 1, "caption": "asd", "status": "active", "users": [] } ]}/api/用户:{ "success": true, "data": [ { "id": 1, "username": "asdasd", "email": "m@m.m", "status": "active", "departments": [] } ]}
2 回答
慕容708150
TA贡献1831条经验 获得超4个赞
这对我有用:
public function with($id, $relations, $columns = ['*'])
{
$query = $this->model->newQuery();
$query = $query->with($relations);
return $query->find($id, $columns);
}
互换的青春
TA贡献1797条经验 获得超6个赞
在做你正在做的事情时,你基本上要创建一个可以无限期运行的数组。
首先,toArray()从两个模型中删除方法,实际上几乎没有理由覆盖此方法。
为了实现您想要的,您可以在需要时使用with()简单地加载关系,例如
public function show($id)
{
return User::with('departments')->findOrFail($id);
}
如果您正在使用路由模型绑定或者您刚刚检索了模型,您可以使用load()(延迟预加载)代替:
public function show(User $user)
{
$user->load('departments');
return $user;
}
- 2 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消