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

不能使用 Laravel 将 stdClass 类型的对象用作数组

不能使用 Laravel 将 stdClass 类型的对象用作数组

PHP
慕仙森 2021-06-14 16:26:51
我已经制作了功能来显示我对下面菜单我的控制器代码的所有权限:<?php    class PrivilegesController extends Controller    {        public function getAllPrivileges()        {            $privileges  = DB::table('prev_definition')->orderBy('id', 'asc')->get();            $privileges  = $this->build_heirarchy($privileges);            $resultArray = ['status' => true, 'message' => 'Privileges found!', 'data' => $privileges];            return json_encode($resultArray);        }        public function build_heirarchy($result_set, $parent_id = 0)        {            $rs = array();            foreach ($result_set as $row) {                $row['is_checked'] = 1; // here is error                if ($row['parent_id'] == $parent_id) {                    $children = $this->build_heirarchy($result_set, $row['id']);                    if ($children) {                        if ($children[0]['type'] == 'menu') {                            $type = 'submenu';                        } else {                            $type = 'permission';                        }                        $row[$type] = $children;                    }                    $rs[] = $row;                }            }            return $rs;        }    }?>但是我收到了无法使用类型的对象stdClass作为数组的错误,我很困惑如何才能做到这一点,非常感谢您的帮助!{  "data": [    {      "created_at": "2019-05-20 15:48:34",      "deletedAt": null,      "display_group": "patient",      "icon": "NULL",      "id": 297,      "isDeleted": null,      "is_checked": 1,      "parent_id": 0,      "priv_key": "can_access_patient",      "priv_title": "Patient",      "type": "menu",      "updated_at": "2019-05-20 15:48:34"    }  ],  "message": "Privileges found!",  "status": true}这是我的最终控制器代码,我还与您分享了响应,您可以查看此内容,如果还有任何更改,请告诉我
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

根据您的建议和评论,我修改了您的代码,一旦检查并让我知道。


class PrivilegesController extends Controller

{

    public function getAllPrivileges()

    {

        $privileges = DB::table('prev_definition')->orderBy('id', 'asc')->get();

        // add below line, keep your old code as it is and check

        $privileges  = json_decode(json_encode($privileges), true);

        $privileges  = $this->build_heirarchy($privileges);

        $resultArray = ['status' => true, 'message' => 'Privileges found!', 'data' => $privileges];

        return json_encode($resultArray);

    }

    public function build_heirarchy($result_set, $parent_id = 0)

    {

        $rs = array();

        foreach ($result_set as $row) {

            $row['is_checked'] = 1; // here is error

            if ($row['parent_id'] == $parent_id) {

                $children = $this->build_heirarchy($result_set, $row['id']);

                if ($children) {

                    if ($children[0]['type'] == 'menu') {

                        $type = 'submenu';

                    } else {

                        $type = 'permission';

                    }

                    $row[$type] = $children;

                }

                $rs[] = $row;

            }

        }

        return $rs;

    }

}

编辑

  1. 只有父 id 为 0 的记录,因此它只会创建一个父记录,并递归地附加子数据。检查这个

  2. 现在,对于父 id 1,它在屏幕截图中有 2 条记录,因此两个元素将附加在父元素中。

  3. 现在,对于父 id 2,它在屏幕截图中有 4 条记录,因此 4 个元素将附加到 id 为 2 的元素内。

  4. 考虑到父ID,这将在每个元素的内部进行。

  5. 随后所有数据将附加到它的每个父级。所以索引只有一个,数据递归地附加到它的每个相关父级。

我希望我很清楚。


查看完整回答
反对 回复 2021-06-25
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

if ($children)

{

    if($children[0]->type=='menu')

        $type = 'submenu';

    else

        $type = 'permission';


    $row[$type] = $children;

}


查看完整回答
反对 回复 2021-06-25
  • 2 回答
  • 0 关注
  • 279 浏览

添加回答

举报

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