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 条评论
登录 后参与评论

相关文章

来自专栏算法channel

TensorFlow笔记|Get Started

本系列推送主要参考: Stanford University CS20SI: Tensorflow for Deep Learning Research. Te...

37480
来自专栏人工智能LeadAI

TensorFlow会话的配置项

01 TensorFlow配置项的文档位于这里 TensorFlow可以通过指定配置项,来配置需要运行的会话,示例代码如下: run_config = tf.C...

56740
来自专栏计算机视觉与深度学习基础

Leetcode 62 Unique Paths

A robot is located at the top-left corner of a m x n grid (marked 'Start' in th...

24380
来自专栏Seebug漏洞平台

CVE-2015-1641 Word 利用样本分析

00 引 子 本文我们将通过一个恶意文档的分析来理解漏洞 CVE-2015-1641(MS15-033)的具体利用过程,以此还原它在现实攻击中的应用。就目前来...

37180
来自专栏tkokof 的技术,小趣及杂念

Sweet Snippet系列 之 TCP数据接收

  虽说仍然是Sweet Snippet,不过本篇并没有代码,纯粹是自己觉得有点趣味,就索性一记了~

8310
来自专栏linux驱动个人学习

Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)

每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择...

21120
来自专栏AI研习社

AI-Blocks:可以让任何人创建机器学习模型的所见即所得交互界面 | Github 项目推荐

AI-Blocks 是一个强大且直观的所见即所得交互界面,可以让任何人都创建机器学习模型。 ? AI-Block 通过可拖动的对象来创建简单的场景,该模型可以直...

398160
来自专栏liulun

windows服务器性能监控工具、方法及关键指标

监控方法 推荐使用windows自带的“性能监视器”(老版本的windows叫性能计数器)来监控服务器的性能。 打开控制面板内的管理工具,在管理工具内打开性能监...

67060
来自专栏伪君子的梦呓

用 Python 生成彩色动态二维码

58270
来自专栏cloudskyme

设计模式(5)-己所不欲,施之于人(代理模式)

什么是代理?在我们的日常生活中的例子非常多。 比如上网有的时候使用代理服务器,通过代理上网,这就是代理的一个非常常见的例子。 从这里边可以看到3个对象:真实网路...

35140

扫码关注云+社区

领取腾讯云代金券