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];
    }
}
<?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) ;
    }
}

在这里插入图片描述

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

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

在这里插入图片描述

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


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

相关文章
|
网络协议
内网穿透的原理和实现方式
一、定义 内网穿透也成NAT穿透,进行NAT穿透是为了使具有某一个特定源IP地址和源端口号的数据包不被NAT设备屏蔽而正确路由到内网主机。
|
SQL 关系型数据库 MySQL
省市区管理sql数据表设计、以及全国省市区全部最新数据
省市区管理sql数据表设计、以及全国省市区全部最新数据
3515 0
省市区管理sql数据表设计、以及全国省市区全部最新数据
ThinkPHP6的控制器定义及控制器初使用
本文介绍了ThinkPHP6框架中控制器的定义和初步使用方法。内容包括控制器的文件位置、命名规范、如何改变控制器目录名、单应用模式下的项目访问路径,以及控制器类文件的实际位置和访问URL的示例。文章还提到了ThinkPHP的控制器类可以灵活定义,无需继承任何基础类库,但建议继承一个基础的控制器类以方便扩展。控制器名不区分大小写,并且支持驼峰命名转下划线的方式。
ThinkPHP6的控制器定义及控制器初使用
|
6月前
|
监控 安全 网络安全
网络安全新姿势:多IP配置的五大好处
服务器配置多IP地址,既能提升网络速度与安全性,又能实现多站点托管和故障转移。本文详解多IP的五大妙用、配置方法及进阶技巧。从理论到实践,合理规划IP资源,让服务器性能跃升新高度。
193 2
|
数据采集 存储 人工智能
数据治理工作的持续评估与优化策略
数据治理工作的持续评估与优化是企业实现数据价值最大化的关键。通过明确目标、建立评估体系、实施定期评估、制定优化策略以及建立反馈机制,企业可以不断提升数据治理水平,为业务决策提供有力支持,推动企业持续健康发展。在这个过程中,保持对新技术、新方法的关注与探索,也是确保数据治理工作与时俱进的重要途径。
1044 4
|
9月前
|
SQL 安全 PHP
thinkphp5之sql注入漏洞-builder处漏洞
在Web应用开发中,SQL注入是一种需要高度警惕的安全漏洞。通过深入理解ThinkPHP5中的SQL查询机制,并结合安全编码实践,开发者可以有效防止SQL注入攻击,保障应用的安全性和稳定性。
411 13
|
SQL 关系型数据库 MySQL
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方法的用法
|
前端开发 PHP
ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数
本文介绍了ThinkPHP6中视图的安装和使用,包括通过`composer`安装`topthink/think-view`,使用`view::fetch()`进行模板渲染和变量赋值,以及使用`view::assign()`进行全局模板变量赋值。还提到了助手函数作为`view::fetch()`和`view::assign()`的封装组合,但效率较低。
ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数
thinkPhP6.0安装教程图解--PHP框架安装
本文是一篇关于ThinkPHP 6.0安装教程的图解,包括环境检查、安装Composer、修改Composer镜像地址、安装ThinkPHP框架以及启动运行ThinkPHP的步骤。文章详细描述了每个步骤的操作方法,并提供了相应的命令和截图,帮助用户理解并顺利完成ThinkPHP 6.0的安装和运行。
thinkPhP6.0安装教程图解--PHP框架安装