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 框架的 访问器 修改器 使用方式大同小异, 查阅官方文档就有详细的说明..

  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581590.html
Copyright © 2011-2022 走看看