模型获取器和模型修改器

一.模型获取器

1. 获取器的作用是对模型实例的数据做出自动处理;

2. 一个获取器对应模型的一个特殊方法,该方法为 public;

3. 方法名的命名规范为:getFieldAttr(); 比如有UserModel中的 bid字段 getBidAttr()

4. 举个例子,数据库表示状态 status 字段采用的是数值;而页面上,我们需要输出 status 字段希望是中文,就可以使用获取器(0代表:未注册,1代表:已注册);

5.不使用模型获取器显示效果如下:

如果以上想要实现bid为1 显示“第一个注册的” 那需要if判断很麻烦

6. 在 User 模型端,我创建一个对外的方法,如下:

    // 创建模型获取器,参数$value 为bid 字段的各个值 
    public function getBidAttr($value){
        // 设置bid字段的规则匹配
        $bid=[1=>'第一个注册的',2=>'第二个注册的'];
        // 根据规则返回
        return $bid[$value];
    }

控制器中获取数据,效果如下

    public function show(){
       $user = UserModel::find();
       return json($user);

    }

除了 getBidAttr 中 Field 可以是字段值,也可以是自定义的虚拟字段;

 

    // 定义函数没有的字段 $value 只是个占位符,第二个参数$data 得到的是筛选到的数据,然后得到最终值;
    public function getNoAttr($value,$data){
        // 设置bid字段的规则匹配
        $bid=[1=>'第一个注册的',2=>'第二个注册的'];
        // 根据规则返回
        return $bid[$data['bid']];
    }

8.No这个字段不存在,而此时参数$value 只是为了占位,并未使用;

10. 第二个参数$data 得到的是筛选到的数据,然后得到最终值;

11. 如果你定义了获取器,并且想获取原始值,可以使用 getData()方法;

    // 定义函数没有的字段 $value 只是个占位符,第二个参数$data 得到的是筛选到的数据,然后得到最终值;
    public function getNoAttr($value,$data){
        // 设置bid字段的规则匹配
        $bid=[1=>'第一个注册的',2=>'第二个注册的'];
        // 根据规则返回,$data 为获取到的数据数组,我们就需要bid列
        return $bid[$data['bid']];
    }

控制器

    public function show(){
        //根据主键获取UserModel对象
       $user = UserModel::find();
       return $user->No;

    }

返回效果显示

 

 

如果你定义了获取器,并且想获取原始值,可以使用 getData()方法;

    public function show(){
        //根据主键获取UserModel对象
       $user = UserModel::find();
       //获取全部原始数据  
       dump($user->getData());
       //获取bid 字段原始数据
       echo $user->getData('bid');

    }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章