如何在用户创建之后更新其他用户的用户组?

需求

用户推荐注册制,在用户注册信息写入数据库之后,在满足某些条件的情况下,需要更新父级的用户组。

问题

user Model里面

 public static function boot()
    {
        parent::boot();
        static::created(function(){
           //满足条件则更新用户组
            User::updateroles();
        });
    }

updateroles里面判断了条件,条件成立调用了下面的方法 (使用了Zizaco/entrust)

public static function getchildroles($phone,$name)
    {
        //根据手机号查找第一层子元素
        $children = User::where('tphone',$phone)->get();
        if(!empty($children))
        {
            //获取第一层子元素数量
            self::$last[$name] = $children->count();
            //循环第一层子元素
            foreach($children as $child)
            {
                //获得第一层子元素的用户组
                $child_rolename = $child->roles->first()->name;
                self::$last[] = $child_rolename;
                //获得一层子元素的手机号
                $child_phone = $child->phone;
                $child_name = $child->name;
                self::getchildroles($child_phone,$child_name);
            }
        }
    }

使用 Laravel-Administrator后台添加用户
但是执行到

 //获得第一层子元素的用户组
                $child_rolename = $child->roles->first()->name;

时出现下面错误
file

后台用户列表显示用户已经被添加,但是用户组信息是空的:
file


以上
难道不是应该用户存入表之后再执行created的内容么?如果存入表了,用户组关系应该也写入才对?为何出现空的情况呢?
请问这可能是哪里的问题?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

这一行改为

$child_rolename = $child->load(‘roles’)->roles->first()->name;

再试一试。

因为你前面 $children = User::where('tphone',$phone)->get(); 获取到的就是 collection,collection 是不能使用模型关联方法的。要想使用的话,可以先用 with() 预载入关联模型,或者在 collection 上使用 load() 惰性载入关联模型。

P.S. 希望你的代码能遵循 PSR-2 ,函数名看得好变扭 :joy:

7年前 评论

@young 谢谢回复
但是修改后还是报一样的错误。。

7年前 评论

已解决 :
$child_rolename = $child->roles->first() 拿到的是个数组
所以直接用$child_rolename['name'] 就好了

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!