当我们创建一个UserModel类的时候,其实已经遵循了系统的约定。ThinkPHP要求数据库的表名和模型类的命名遵循一定的规范,首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的数据表名称,并且首字母大写,然后加上模型类的后缀定义,例如:

UserModel 表示User数据对象,(假设数据库的前缀定义是 think_)其对应的数据表应该是think_user

UserTypeModel 对应的数据表是 think_user_type 
 
如果你的规则和系统的约定不符合,那么需要设置Model类的tableName属性。

在ThinkPHP的模型里面,有两个数据表名称的定义:

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

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

下面举个例子来加深理解:

例如,在数据库里面有一个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需要完整的表名定义

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

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

protected $dbName = 'top';

另外,我们来了解下表后缀的含义。表后缀通常情况下用处不大,因为这个和表的设计有关。但是个别情况下也是有用,例如,我们在定义数据表的时候统一采用复数形式定义,下面是我们设计的几个表名
think_users、think_categories、think_blogs,我们定义的模型类分别是UserModel 、CategoryModel
、BlogModel,按照上面的方式,我们必须给每个模型类定义tableName属性。其实我们可以通过设置表后缀的方式来实现相同的效果,我们可以设置DB_SUFFIX
配置参数为s,那么系统在获取真实的表名的时候就会自动加上这个定义的表后缀,我们就不必给每个模型类定义tableName属性了,而只是对categories这样的复数情况单独定义trueTableName属性就可以了。

ThinkPHP中的模型命名的更多相关文章

  1. ThinkPHP中的模型

    ThinkPHP中的模型 1.什么是模型(Model) 模型表示企业数据和业务规则,实际项目开发中,主要实现与数据库进行操作. 2.模型的定义规则 模型类的命名规则是除去表前缀的数据表名称,采用驼峰法 ...

  2. ThinkPHP中的模型二

    ThinkPHP中的模型 1.为什么要创建数据对象 案例:使用ThinkPHP完成部门管理 ① 设计数据库 ② 创建Dept控制器 路径:./Application/Admin/Controller创 ...

  3. ThinkPHP中视图模型详解.

    很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相 ...

  4. thinkphp中如何实现无限级分类?

    thinkphp中如何实现无限级分类? 一.总结 1.数据表设计+递归算法 二.php实现无限级分类实例总结 1.数据库数据如下: 2.任务需求:给一个id,求自己和所有父亲. 3.实现代码如下:th ...

  5. thinkphp 中模型究竟是什么用?

    thinkphp 中模型究竟是什么用? 问题 似乎所有的操作都能在控制器中就能完成,模型除了几种验证之外,究竟是干什么用的,这个问题一直没理解透 解答 解答一 要明白这个问题,必须了解 MVC 历史. ...

  6. ***ThinkPHP中的常用方法汇总总结:M方法,D方法,U方法,I方法

    thinkPHP中M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法 ...

  7. thinkphp中的大字母的意思

    ThinkPHP 单字母函数 A() 内部实例化控制器 D() 实例化自定义模型类 M() 实例化一个基础模型类 R() 调用某个控制器的操作方法 L() 启用多语言的情况下,设置和获取当前的语言定义 ...

  8. thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么

    thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么 一.总结 一句话总结:在thinkphp中,我们访问的始终是入口文件,并没有主动去访问任何一个其他文件,只不过在入口文件体内 ...

  9. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

随机推荐

  1. 人类基因(human)

    题目描述 上了大学之后,小W和小Z一起报了一门三宝课,在实践课上遇到了一些问题. 一条染色体上有nn对基因,每种基因都可以用一个数ai来表示,作为标号. 现在,在其中一条染色单体上某基因发生了突变. ...

  2. nginx问题

    1.杀死nginx之后,找不到pid http://bbs.pxecn.com/thread-122116-1-1.html

  3. Mongoose 参考手册

    转自:https://cnodejs.org/topic/548e54d157fd3ae46b233502 Mongoose 是什么? 一般我们不直接用MongoDB的函数来操作MongoDB数据库 ...

  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---22

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  5. linux库文件的制作

    一.为什么要使用库文件 我们在实际编程工作中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同, 实现代码也相同,也是我们所说的重复代码.比如,很多项目里都有一个用户验证的功能. 代码段如下: ...

  6. Linux 一个sysv 脚本参考模板

    说明:  1.很多时候我们的服务都是通过源码包编译安装,但是有的源码包编译完成后并不提供该服务的sysv风格脚本,我们只能手动执其二进制程序+配置文件      2.如果服务器宕机或重启,就不能自动完 ...

  7. yii框架美化访问路径,去掉index.php/?r=部分

    一.找到配置文件(ps:advance高级模板) 在工程目录-> backend目录 或 frontend目录 -> config目录 -> main.php文件 -> 在 r ...

  8. autofac 用法总结

    autofac官网: http://autofaccn.readthedocs.io/en/latest/getting-started/index.html autofac作为一个热门ioc框架,还 ...

  9. Codeforces Gym100735 D.Triangle Formation (KTU Programming Camp (Day 1) Lithuania, Birˇstonas, August 19, 2015)

    日常训练题解 D.Triangle Formation You are given N wooden sticks. Your task is to determine how many triang ...

  10. HDU 1025 Constructing Roads In JGShining's Kingdom[动态规划/nlogn求最长非递减子序列]

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...