thinkphp6.0-------模型层

一、进入模型层

服务类中已经提到,model层使用服务类的流程进行了初始化:注册模型服务类ModelService并启动服务类方法boot,在boot方法中调用了Model类的几个静态方法,设置Model类的一些静态属性。当创建一个模型对象时,会调用Model类的构造函数,这样就进入到模型层部分。

二、相关类

ModelService类:模型服务类

成员方法:

boot:调用Model层的四个静态方法(setDb setEvent  setInvoker  maker:如果不存在方法会调用魔术方法__callStatic进行处理)进行设置一些属性。

Model类:模型层的抽象类

成员方法:

maker:为静态变量数组maker添加元素(函数类型的参数)

setDb:设置静态变量db的值

setInvoker:设置静态变量invoker的值

构造函数:

(1)对传入的数组中废弃字段进行处理,并保存原始数据

(2)循环处理静态变量数组maker中的元素(call_user_func来调用回调函数)

回调函数是通过maker方法的参数传过来的,在ModelService类的boot方法中有调用maker方法,参数是一个函数对象,在构造函数中使用call_user_func来回调用这个函数对象:代码如下,设置自动写入的时间字段和设置时间的格式

function (Model $model) {
            $config = $this->app->config;

            $isAutoWriteTimestamp = $model->getAutoWriteTimestamp();

            if (is_null($isAutoWriteTimestamp)) {
                // 自动写入时间戳
                $model->isAutoWriteTimestamp($config->get('database.auto_timestamp', 'timestamp'));
            }

            $dateFormat = $model->getDateFormat();

            if (is_null($dateFormat)) {
                // 设置时间戳格式
                $model->setDateFormat($config->get('database.datetime_format', 'Y-m-d H:i:s'));
            }

        }

注意:这个函数中有个isAutoWriteTimestamp方法(知识点:trait的用法)

魔术方法__call:类中没有调用的方法时,会调用这个魔术方法

(1)判断静态属性macro中是否存在

(2)判断方法名是否是withattr,如果是就调用方法withAttribute

(3)调用方法db返回的查询类中的对应方法

db:获取数据库查询对象

connect:用于切换数据库连接

DbManager类------->子类Db类:主要就是创建连接,获取配置信息等

连接类:接口ConnectionInterface------->抽象类Connection--------->抽象类PDOConnection----------->Mysql类

数据库的链接,PDO预处理,绑定参数等,一些数据库的操作,用Builder类生成的sql模板进行预处理,Query类中保存的数据进行参数绑定

数据查询类:抽象类BaseQuery------->Query类

数据库驱动类:抽象类Builder--------->Mysql类

将Query类中的查询参数组装成sql模板

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值