亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多對多 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": "[email protected]",            "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 關注
  • 160 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號