yii中ActiveRecord问题?

发布于 2022-09-11 19:30:43 字数 467 浏览 25 评论 0

我的 User 类继承 ActiveRecord 类:
图片描述

然后查询数据:
图片描述

然后我打印user对象结果:
图片描述

就是user对象关联数据表字段的属性值全为NULL,但私有属性attributes却有对应值,请问这是什么问题?我如何才能像$user->username这样方式去访问到数据呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若有似无的小暗淡 2022-09-18 19:30:43

把你手动添加的属性删掉,直接获取,应该是调用 getter 自动去取的。

挽袖吟 2022-09-18 19:30:43

没用过yii,但框架的orm实现上原理应该是类似的,框架会将查询结果放在某个类属性中,看你的打印结果,应该是放到attributes属性里,在获取时通过实现__get方法去访问attributes属性,简单的实现如下

class ActiveRecord {
    private $attributes = [];
    
    public function __get($name) {
        if (isset($this->attributes[$name])) {
            return $this->attributes[$name];
        }
        return null;
    }
    
    // 同时也会有__set方法的实现
    public function __set($name, $value) {
        $this->attributes[$name] = $value;
    }
}

经过上面的实现,在访问id时就可以直接访问$obj->id,这个访问的过程如下
查找$obj对象有没有public声明的id属性,如果没有,会走__get方法,判断到attributes属性里有id,则将其返回。
__set方法类似。

当然,框架的orm的实现肯定更加复杂,有更多的过滤验证机制,这个就得你自己去读框架源码了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文