我有 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 关注
- 170 浏览
添加回答
举报
0/150
	提交
		取消
	