博客列表 >ThinkPHP5.1新手笔记(五):【核心知识】模型

ThinkPHP5.1新手笔记(五):【核心知识】模型

一嗔
一嗔原创
2021年05月29日 17:20:29300浏览

        1、模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。模型类并不一定要访问数据库,而且在5.1的架构设计中,只有进行实际的数据库查询操作的时候,才会进行数据库的连接,是真正的惰性连接。


        2、ThinkPHP的模型层支持多层设计,可以对模型层进行更细化的设计和分工,例如把模型层分为逻辑层/服务层/事件层等等。


        3、大多数情况下,不同模块的模型是不需要独立的,因此可以统一在 common 模块下面定义模型(Validate也是)。


        4、模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:Uesr对应think_user表,UserType对应think_user_type表。


        5、一般继承基类模型use think\Model。


        6、默认主键为 id,如果表中没有使用 id 作为主键名,需要在模型中设置属性,如:protected $pk='uid'。5.1中模型不会自动获取主键名称,必须设置pk属性。


        7、模型操作和数据库操作的一个显著区别是模型支持包括获取器、修改器、自动完成在内的一系列自动化操作和事件,简化了数据的存取操作。


        8、模型同样支持初始化,与控制器的初始化不同的是,模型的初始化是定义 Model 的 init 方法,如:protected static function init(){ }。模型初始化方法通常用于注册模型的事件操作。init 必须是静态方法,并且只在第一次实例化的时候执行。


        9、tp建议:新增数据的最佳实践原则:使用 create 方法新增数据,使用 saveAll 批量新增数据。喜欢用$this->...。更新和删除最好先查询再操作。


            查询:$this->where->find/select( );

            新增:$this->allowField(true)->save( );

            更新:$info=$this->where->find( ); $result=$info->save( );  //更新和新增都是使用save方法

            删除:$info=$this->where->find( ); $result=$info->delete( );


        10、模型支持自动写入创建和更新的时间戳字段(默认关闭),有两种方式配置支持。第一种方式是全局开启,在数据库配置文件中进行设置:'auto_timestamp' => true;第二种是在需要的模型类里面单独开启:protected $autoWriteTimestamp = true。个人喜欢第二种。一旦配置开启的话,会自动写入 create_time 和 update_time 两个字段的值,默认为整型。时间字段的自动写入仅针对模型的写入方法,如果使用数据库的更新或者写入方法则无效。


        11、在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。在模型类中定义 use SoftDelete; 对应表中的delete_time。【注意】:表中delete_time字段默认值必须为null,因为开启软删除后,查询语句变为SELECT * FROM `tp_book` WHERE `tp_book`.`delete_time` IS NULL。


        12、数据查询有问题,第一时间看SQL语句。


        13、模型关联:


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议