前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP入门第六天

TP入门第六天

作者头像
苦咖啡
发布2018-05-07 17:40:30
7650
发布2018-05-07 17:40:30
举报
文章被收录于专栏:我的博客我的博客

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方法进行配置赋值

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012年8月5日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档