为了账号安全,请及时绑定邮箱和手机立即绑定

多对多 toArray() 覆盖中的最大堆栈深度超出问题

多对多 toArray() 覆盖中的最大堆栈深度超出问题

PHP
开满天机 2021-11-05 13:02:53
我有 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);

}


查看完整回答
反对 回复 2021-11-05
?
互换的青春

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;

}


查看完整回答
反对 回复 2021-11-05
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信