zoukankan      html  css  js  c++  java
  • ThinkPHP 的获取器和设置器

    ThinkPHP version: 5.*

    在存储数据时,有时候为了节省空间和方便判断,并不是直接存储的, 比如数据库的 用户表 users性别 sex 这个字段,存储的是 0 和 1, 那么在取出来的是否,就需要加工处理,然后在展示...如果是使用 laravel 或者 ThinkPHP 5.* 以上版本就可以使用 获取器/设置器来控制这样的数据

    注意: 在使用获取器/设置器时, 必须使用 get字段Attr 的形式,如 getUserNameAttr,使用驼峰命名, 但是在获取这个字段字段时候必须使用下划线的形式, 如 $user->user_name

    获取器

    • 对值进行转换(改变原来的值)
    class User extends Model {
        public function getSexAttr ($value) {
            return $value == 1 ? '男' : '女';
        }
    }
    // 获取数据
    User::find(1)->sex;
    

    此时,获取的是改变后的数据

    • 定义数据表表中不存在的值(不改变原来的值)
    class User extends Model {
        public function getSexTextAttr ($value) {
            $text = [0=> '女', 1 => '男'];
            return $text[$value];
        }
    }
    // 此时就可以获取这个新属性了
     User::find(1)->sex_text;
    
    // 获取原始数据
     User::find(1)->sex;
    

    此时可以获取原数据, 也可以访问新属性数据

    修改器

    在数据存入数据库之前先加工在存入数据库,比如讲名字全部转为小写后在存入数据库

    public function setPasswordAttr($value) {
        return md5($value);
    }
    

    注意: 此处有坑, 这个方法,只能是使用 save 有效果, 使用 insert 方法没有效果

    $user->password = '123456';
    $user->save(); // 此时会自动 md5 处理
    

    ThinkPHP 官方文档: 修改器方法仅对模型的写入方法有效, 调用数据库的写入方法写入无效,例如下面的方式修改器无效 本文是以 ThinkPHP 作为实验的, laravel 框架的 访问器 修改器 使用方式大同小异, 查阅官方文档就有详细的说明..

  • 相关阅读:
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Python long() 函数
    Python int() 函数
    Python 变量类型
    Python 基础语法
    Python 中文编码
    深度学习点云语义分割:CVPR2019论文阅读
    自动泊车技术短暂困境,前景可期
    深度学习网络模型压缩剪枝详细分析
    用OpenCV4实现图像的超分别率
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581590.html
Copyright © 2011-2022 走看看