zoukankan      html  css  js  c++  java
  • 模型获取器和模型修改器

    一.模型获取器

    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');
    
        }

    动态获取器

    使用 WithAttr 在控制器端实现动态获取器,比如设置所有 bname为大写:控制端

        public function show(){
            //控制器端动态获取器 参数1:获取的字段名  参数2回调函数中的$value 就是获取参数1的值
            $user=UserModel::withAttr('bname',function ($value){
                return strtoupper($value);
            })->find();
            return json($user);
        }

    使用 WithAttr 在控制器端实现动态获取器,比如设置 bid 翻译为中文;

        public function show(){
            //控制器端动态获取器 参数1:获取的字段名  参数2回调函数中的$value 就是获取参数1的值
            $user=UserModel::withAttr('bid',function ($value){
                $result=[1=>'第一',2=>'第二',3=>'第三'];
                return  $result[$value];
            })->find();
            return json($user);
        }

     同时定义了模型获取器和动态获取器,那么模型修改器优先级更高;

    二.模型修改器

    1. 模型修改器的作用,就是对模型设置对象的值进行处理;

    2. 比如,我们要新增数据的时候,对数据就行格式化、过滤、转换等处理;

    3. 模型修改器的命名规则为:setFieldAttr;

    4. 我们要设置一个新增,规定邮箱的英文都必须大写,修改器如下:

    模型

        //模型修改器 修改bname字段 转换成大写
        public function setBnameAttr($vaule){
    
            return strtoupper($vaule);
        }
        

    控制器

        public function show(){
            $user= new UserModel();
            $data=['bid'=>20,'bname'=>'wangyue','u_time'=>'2021-12-15'];
            //模型修改器,必须要使用模型save方法 而不能使用UserModel::insert();这种
            $user->save($data);
        }

    5. 除了新增,会调用修改器,修改更新也会触发修改器;

    6. 模型修改器只对模型方法有效,调用数据库的方法是无效的,比如->insert();

     

  • 相关阅读:
    GAMBIT、ICEM、HYPERMESH耦合面的处理方法
    如何用hypermesh生成包含interface的流体网格
    python求数字位数的方法
    drawPython
    Python入门计划
    书法与篆刻创作结课
    易忽视的Python知识点
    Ubuntu中,wxpython的TextCtrl引发的error:_pixman_log_error
    在Ubuntu15.10中,使用wxPython的webview和JS进行交互
    PyCharm导入tensorflow包
  • 原文地址:https://www.cnblogs.com/xiaowie/p/15686612.html
Copyright © 2011-2022 走看看