thinkphp5第29课:模型-获取器

1、获取器

获取器的作用是在获取数据的字段值后自动进行处理

有一个学生表,字段stustus为Int类型,1 = 正常,0 = 冻结;createtime表示创建时间,使用时间戳存储日期

这样做的目的:整形的查询速度比字符串要高得多,能提高查询速度。项目中经常这样使用

但是当在页面上显示学生信息时,不能显示0或者1,而是应用显示“正常”或“冻结”;创建时间显示正常的时间,如:2019-11-9

2、定义模型

<?php
namespace app\index\model;
use think\Model;

//数据表student的模型类
class Student extends Model
{
    //自定义表名
    protected $table = "my_student";
    
    //status字段的获取器
    protected function getStatusAttr($value)
    {
        $data = [0=>'冻结',1=>'正常'];
        return $data[$value];
    }

    //createtime的获取器
    protected function getCreatetimeAttr($value)
    {
        return date('Y-m-d',$value);
    }
}

3、 使用模型

 public function index()
    {
        //实例化学生模型
        $stu = new Student();
        //返回多条数据,数据格式:二维数组,每个元素是一个模型对象
        $data = $stu->order('no')->select();

        $arr = [];
        foreach ($data as $row){
            //将模型对象转换成数组
            $arr[] = $row->toArray();
        }
        print_r($arr);
    }

输出的数据为:

认真查看上面的输出结果,就会发现status字段和createtime字段,显示的数据与数据表中的数据不一样,它经过了读取器的处理。

使用模型获取单条记录,代码如下:

 public function getstudent($no)
    {
        $stu = new Student();
        $data = $stu->where('no',$no)->find();
        print_r($data);
    }

输出结果哪下:

通过上面的输出结果来看,使用find()方法,得到并不是一维数组,而是一个对象,所以还要后 续的处理

public function getstudent($no)
    {
        $stu = new Student();
        $data = $stu->where('no',$no)->find();
        //将对象转换成数组
        $data = $data->toArray();
        print_r($data);
    }

输出结果变成了数组,如下:

发布了136 篇原创文章 · 获赞 43 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lsmxx/article/details/102989296