专栏首页我的博客TP入门第六天

TP入门第六天

1、模型

模型类一般位于项目的Lib/Model目录下面,当我们创建一个UserModel类的时候,其实已经遵循了系统的约定。模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型类的后缀定义Model

模型名(类名)

约定对应数据表(假设数据库的前缀定义是 think_)

UserModel

think_user

UserTypeModel

think_user_type

如果你的数据表和这个不一样,可以使用以下属性进行调正

tableName

不包含表前缀的数据表名称,一般情况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不同的时候才需要定义。

trueTableName

包含前缀的数据表名称,也就是数据库中的实际表名,该名称无需设置,只有当上面的规则都不适用的情况或者特殊情况下才需要设置。

dbName

定义模型当前对应的数据库名称,只有当你当前的模型类对应的数据库名称和配置文件不同的时候才需要定义。

贴出来官方手册中的例子

下面举个例子来加深理解,例如,在数据库里面有一个think_categories表,而我们定义的模型类名称是CategoryModel,按照系统的约定,这个模型的名称是Category,对应的数据表名称应该是think_category(全部小写),但是现在的数据表名称是think_categories,因此我们就需要设置tableName属性来改变默认的规则(假设我们已经在配置文件里面定义了DB_PREFIX为 think_)。

protected $tableName = ‘categories’;

注意这个属性的定义不需要加表的前缀think_

而对于另外一种特殊情况,数据库中有一个表(top_depts)的前缀和其它表前缀不同,不是think_而是 top_,这个时候我们就需要定义 trueTableName属性了

protected $trueTableName = ‘top_depts’;

注意trueTableName需要完整的表名定义

除了数据表的定义外,还可以对数据库进行定义,例如:

protected $dbName = ‘top’;

2、实例化模型

首先说明一下有四种实例化方法

第一种:实例化基础模型类

用法:$user=new Model(‘user’);//或者使用$user=M(‘user’);//这里声明下user的首字母可以大写也可以小写

用途:支持跨项目调用,完成基本的增删查改(CURD)操作

第二种:实例化公共模型类

用法:$user=new CommonModel(‘User’);这里说明下这个CommonModel.class.php是在/APP_PATH/lib/Model目录下建立的,比如user表(省去了前缀)和column表中都需要这样一个简单的方法public function GG(){echo “Joyous学习TP3.0″;}当然一般不会这么简单的逻辑(我这里只是让大家容易理解,如果没有理解话也不要担心~)

第三种:实例化自定义模型类

用法:这种情况是使用的最多的,一个项目不可避免的需要定义自身的业务逻辑实现,就需要针对每个数据表定义一个模型类,这个时候需要在项目的lib/model目录下,比如UserModel.class.php。这个时候你可以使用$user=new UserModel();//注意这里没有表名了!!或者使用$user=D(‘User’);//后面会讲解D快捷方法

第四种:实例化空模型(一般情况下这种就够用了)

上面说的方法都是集成了sql执行,可是我想自己写一个sql语句怎么执行呢?也就原生SQL怎么办?这就用到了空模型了

$model=new Model();//或者使用M快捷方法

$model->query(“原生sql语句“);

3、M方法和D方法详解

M方法默认是实例化Model类,第二个参数用于指定表前缀,第三个参数就可以指定其他的数据库连接信息。

D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化Model基类,同时对于已实例化过的模型,不会重复去实例化。

附:这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法。效率上就不用我做说明了吧?

4、字段缓存

字段缓存保存在Runtime/Data/_fields/目录下面,缓存机制是每个模型对应一个字段缓存文件(而并非每个数据表对应一个字段缓存文件),命名格式是:数据库名.模型名.php字段缓存包括数据表的字段信息、主键字段和是否自动增长,如果开启字段类型验证的话还包括字段类型信息等等,无论是用M方法还是D方法,或者用原生的实例化模型类一般情况下只要是不开启调试模式都会生成字段缓存(字段缓存可以单独设置关闭)。

配置中:’DB_FIELDS_CACHE’=>false

就是设置不缓存字段信息。

如果你想提高性能,你可以在自定义模型类中添加$fields属性(具体内容参考官方手册)

附:有很多人问到,为何他们的字段不会生成或者就是数据库写入读取失败了?

再次强调:如果是调试模式是不会生成缓存字段的,还有就是如果你项目中已经升程了~app.php和~runtime.php文件,你删除了这两个文件重新运行试试!第二个问题也有可能是更改了字段信息而缓存中的信息没有删除~~~

5、读取配置信息

我们一直在说配置信息config.php,可是我们能获取到里面的信息吗?当然可以!你可以直接用echo C(‘URL_MODEL’);即可当然你可以使用C方法进行配置赋值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Ubuntu配置静态ip

    # sudo gedit /etc/network/interfaces  a. 注释第二行,设置静态IP有关参数 auto eth0 # iface e...

    苦咖啡
  • 新手制作的IOS系统声音监听程序

    原因:今天公司需要使用一个系统声音,但是iphone声音太多了,于是就想到使用一个简单的程序,算是我第一个IOS程序吧~ 参看这里:http://iphoned...

    苦咖啡
  • TP入门第五天

    1、数据库连接 这里说下为和用到配置都是返回数组,$arr=include(‘config.php’);然后你打印出来看看! 配置文件(有两种连接方法) 第一种...

    苦咖啡
  • MyBatis 二级缓存详解

    我们在上一篇文章介绍了 MyBatis 的一级缓存的作用,如何开启,一级缓存的本质是什么,一级缓存失效的原因是什么?MyBatis 只有一级缓存吗?来找找答案吧...

    cxuan
  • MyBatis 二级缓存详解

    我们在上一篇文章介绍了 MyBatis 的一级缓存的作用,如何开启,一级缓存的本质是什么,一级缓存失效的原因是什么?MyBatis 只有一级缓存吗?来找找答案吧...

    纯洁的微笑
  • 深度 | 从朴素贝叶斯到维特比算法:详解隐马尔科夫模型

    选自davidsbatista 作者:David S. Batista 机器之心编译 参与:蒋思源、路雪 本文首先简要介绍朴素贝叶斯,再将其扩展到隐马尔科夫模型...

    机器之心
  • 【机器学习 基本概念】从朴素贝叶斯到维特比算法:详解隐马尔科夫模型

    隐马尔科夫模型是用于标注问题的统计机器学习模型,是一种生成模型。隐马尔科夫模型是关于时序的概率模型,它描述了由一个隐藏的马尔科夫链随机生成不可观测的状态随机序...

    魏晓蕾
  • 智能房屋+大数据,将改变房地产经济学

    大数据文摘
  • 使用Unity3D提取王者荣耀英雄模型 VR资源

    我玩儿王者荣耀的时候,看到大乔的建模非常漂亮,于是想提取出来研究一下。搜索网上发现只有在各个网站出售的提取好了的模型,需要用各种币购买,以及注册等非常麻烦。所...

    bering
  • 【典型案例】如何使用机器学习帮助你快速成为花朵分类专家

    随着信息时代的发展,伴随着照相装备和图片采集设备的普及,越来越多的图片数据广泛存在于生产生活的各个角落,如何对海量图片数据进行高效的分类和检索成为了一项新的挑战...

    腾讯智能钛AI开发者

扫码关注云+社区

领取腾讯云代金券