ThinkPHP6模型中的获取器,修改器及搜索器的简单使用

简介: 本文介绍了ThinkPHP6模型中的获取器、修改器和搜索器的使用方法。获取器用于对模型数据进行自动处理,修改器用于处理模型设置的数据,搜索器用于封装字段的查询条件表达式。文章通过示例代码展示了如何在模型中定义和使用这些方法,以及如何通过控制器调用模型方法进行数据操作。

1. 获取器

获取器的作用是对模型实例的(原始)数据做出自动处理。一个获取器对应模型的一个特殊方法(该方法必须为public类型),方法命名规范为:

getFieldNameAttr (get字段名Attr)

FieldName为数据表字段的驼峰转换,定义了获取器之后会在下列情况自动触发:

  • 模型的数据对象取值操作($model->field_name);
  • 模型的序列化输出操作($model->toArray()toJson());
  • 显式调用getAttr方法($this->getAttr('field_name'));

获取器的场景包括:

  • 时间日期字段的格式化输出;
  • 集合或枚举类型的输出;
  • 数字状态字段的输出;
  • 组合字段的输出;

最常用的就是你的数据库中比如存放了某种状态信息,对应-1,1,2,实际的意思可能为不同的状态,删除,禁用,正常,待审核…

利用获取器我们可以在数据查询过程中将数字状态转换为对应的文字,比如:

<?php
namespace app\model;

use think\Model;

class User extends Model 
{
   
    protected $table = "user";
    // 查询单个用户的方法
    public function queryUserById($id=6)
    {
   
        $user = User::find($id);
        return $user->toArray();
    }

    // 获取器
    public function getStatusAttr($value)
    {
   
        $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
        return $status[$value];
    }
}
AI 代码解读
<?php
namespace app\controller;

use app\BaseController;
use app\model\User;

class test extends BaseController{
   

    public function index(){
   
        $model = new User();
        $data = $model->queryUserById();
        dump($data) ;
    }
}
AI 代码解读

在这里插入图片描述

tips:当你定义获取器后,你想得到原始的数据信息,可以通过getData()方法来获取原始的数据。

2. 修改器

和获取器相反,修改器的主要作用是对模型设置的数据对象值进行处理。

修改器方法的命名规范为:

setFieldNameAttr (set字段名Attr)

修改器的使用场景和读取器类似:

  • 时间日期字段的转换写入;
  • 集合或枚举类型的写入;
  • 数字状态字段的写入;
  • 某个字段涉及其它字段的条件或者组合写入;

定义了修改器之后会在下列情况下触发:

  • 模型对象赋值;
  • 调用模型的data方法,并且第二个参数传入true
  • 调用模型的appendData方法,并且第二个参数传入true
  • 调用模型的save方法,并且传入数据;
  • 显式调用模型的setAttr方法;
  • 显式调用模型的setAttrs方法,效果与appendData并传入true的用法相同;

tips: 修改器方法仅对模型的写入方法有效,调用数据库的写入方法写入无效

最常见的就是往数据库插入数据时,比如说一些涉及金额的字段值,将你传入的值转换为浮点型…

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

class Shops extends Model{
   

    protected $table = "shops";

    public function addShops(){
   
        $shop = Shops::create([
            'shop_name'=>'茶叶',
            'shop_price'=>'1999.9',
            'addtime'=>date("y-m-d")
        ]);
        return $shop->toArray();
    }

    // 金额字段修改器
    public function setShopPriceAttr($value){
   
        return floatval($value);
    }

}
AI 代码解读
<?php
namespace app\controller;

use app\BaseController;
use app\model\Shops;

class test extends BaseController{
   

    public function index(){
   
        $model = new Shops();
        $data = $model->addShops();
        dump($data) ;
    }
}
AI 代码解读

在这里插入图片描述

3. 搜索器

搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式,一个搜索器对应一个特殊的方法(该方法必须是public类型),方法命名规范为:

searchFieldNameAttr (search字段名Attr)

FieldName为数据表字段的驼峰转换,搜索器仅在调用withSearch方法的时候触发。

搜索器的场景包括:

  • 限制和规范表单的搜索条件;
  • 预定义查询条件简化查询;

比如:查询一个name包含J,age>16的用户信息,如下。

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

class User extends Model{
   

    protected $table = "user";

    public function queryUserLike(){
   
        $user = User::withSearch(['name','age'],[
            'name'=>'J',
            'age'=>'16',
        ])->select();
        return $user->toArray();
    }

    // 自定义搜索器 search`FieldName`Attr,每个字段名对应一个搜索器
    public function searchNameAttr($query, $value, $data){
   
        $query->where('name','like', '%'.$value . '%');
    }

    public function searchAgeAttr($query, $value, $data){
   
        $query->where('age','>', $value );
    }
}
AI 代码解读
<?php
namespace app\controller;

use app\BaseController;
use app\model\User;

class test extends BaseController{
   

    public function index(){
   
        $model = new User();
        $data = $model->queryUserLike();
        dump($data) ;
    }
}
AI 代码解读


tp6快结束啦,可以差不多该准备写个小项目了!- ^_^ -!

目录
打赏
0
0
0
0
83
分享
相关文章
uniapp发布快应用失败报错Error: ENOENT: no such file or directory以及hap-chimera-toolkit问题优雅草卓伊凡
uniapp发布快应用失败报错Error: ENOENT: no such file or directory以及hap-chimera-toolkit问题优雅草卓伊凡
70 2
uniapp发布快应用失败报错Error: ENOENT: no such file or directory以及hap-chimera-toolkit问题优雅草卓伊凡
ThinkPHP6的控制器定义及控制器初使用
本文介绍了ThinkPHP6框架中控制器的定义和初步使用方法。内容包括控制器的文件位置、命名规范、如何改变控制器目录名、单应用模式下的项目访问路径,以及控制器类文件的实际位置和访问URL的示例。文章还提到了ThinkPHP的控制器类可以灵活定义,无需继承任何基础类库,但建议继承一个基础的控制器类以方便扩展。控制器名不区分大小写,并且支持驼峰命名转下划线的方式。
ThinkPHP6的控制器定义及控制器初使用
ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局
本文介绍了ThinkPHP6中实现模板布局的三种方式:全局配置方式、模板标签方式和动态方法布局,并通过示例代码展示了如何在项目中应用这些布局方式。
ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局
ThinkPHP6表单上传的数据获取的四种方式【请求对象调用,静态调用,助手函数调用,原生的get|post】
本文介绍了在ThinkPHP6中获取表单上传数据的四种方式:请求对象调用、静态调用(Facade)、助手函数调用以及原生的GET_POST数组。文章通过示例代码展示了每种方式的具体使用方法,并强调了在使用请求对象调用时引入正确的Request类的重要性。
数据治理工作的持续评估与优化策略
数据治理工作的持续评估与优化是企业实现数据价值最大化的关键。通过明确目标、建立评估体系、实施定期评估、制定优化策略以及建立反馈机制,企业可以不断提升数据治理水平,为业务决策提供有力支持,推动企业持续健康发展。在这个过程中,保持对新技术、新方法的关注与探索,也是确保数据治理工作与时俱进的重要途径。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则
本文介绍了在ThinkPHP框架中使用验证码扩展库的方法,包括安装验证码扩展库、在页面中使用验证码、自定义验证码配置以及校验验证码的步骤和代码示例。
ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则
ThinkPHP 集成 jwt 技术 token 验证
本文介绍了在ThinkPHP框架中集成JWT技术进行token验证的流程,包括安装JWT扩展、创建Token服务类、编写中间件进行Token校验、配置路由中间件以及测试Token验证的步骤和代码示例。
ThinkPHP 集成 jwt 技术 token 验证
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
智能语音助手的未来:从技术到伦理的探索
【10月更文挑战第21天】 本文探讨了智能语音助手的发展历程、当前技术现状以及面临的伦理挑战。通过对现有技术的深入分析,文章揭示了智能语音识别和自然语言处理技术的进步对日常生活的影响,同时指出了数据隐私、算法偏见和人机交互等方面的伦理问题。最后,文章提出了对未来智能语音助手发展的展望,强调了在技术创新的同时,必须考虑到伦理和社会影响的重要性。
488 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问