模型命名规范

ThinkPHP 对数据库的表名和模型类的命名遵循一定的规范。首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的数据表名称,并且首字母大写,然后加上模型类的后缀定义。一些例子如下:

表名(不含前缀) 模型名称(类名) 文件名 例子
user UserModel UserModel.class.php class UserModel extends Model{}
user_group UserGroupModel UserGroupModel.class.php class UserGroupModel extends Model{}

提示:系统以驼峰命名法来识别带下划线的表名。

当项目中的表命名规则和 ThinkPHP 中的约定不符时(常常会有这种情况),ThinkPHP 允许对 Model 类的 tableName 和 trueTableName 属性进行设置以达到兼容的目的。

tableName 属性

当表前缀和系统设置的前缀(DB_PREFIX)一致而表名和模型名称不一致时,可设置此属性,例如表名称为 users ,而模型名称为 UserModel ,那么需要在模型类设置:

class UserModel extends Model{
protected $tableName = 'users';
}

trueTableName 属性

如果表的前缀跟系统设定的不一致(表名和模型名可能一致)时,需要设定模型的 trueTableName 属性:

class UserModel extends Model{
protected $trueTableName = 'my_user';
}

注意 trueTableName 值为完整的表名(包括前缀)。

dbName 属性

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

protected $dbName = 'cdb';
表:think_hello_world
模型:HelloWorldModel.class.php
代码
  1. # HelloWorldModel.class.php
  2. namespace ...
  3. use ...
  4. classs HelloWorldModel extend Model {
  5. public function getYourHeader() {
  6. }
  7. }
  8. # 使用
  9. D('HelloWorld')->getYourHeader();
  10. # 模型名称不能使用下划线,如果是使用D加载模型
复制代码

就这样,就已经是操作think_hello_world表了啊

Hassan2014年08月20日
你就不能认真看手册么?有人回答你了,你还扯着trueTableName 属性不放...

回复Keith_hzw2014年08月20日
如果以前用3.1写的数据库表有下划线,难道你更新到3.2就把数据库的表的名字全改了吗

yurke2014年08月19日
手册上有明确说明的。使用首字母大写,后面的用驼峰

回复Keith_hzw2014年08月19日
如果你的表有下划线?还能用驼峰法?protected $trueTableName = "goods_class"; 这句会把本应该 前缀_goods_class 改为 前缀.goods_class

回复yurke2014年08月19日
回复 Keith_hzw : 你有注意到别人的发言吗?首先首字母大写,然后任何下划线都去掉紧接着的字母大写。D('GoodsClass');有注意到这个C大写吗???

回复yurke2014年08月19日
回复 Keith_hzw : 还有你的文件名就有问题,同理文件名也要这样写的。你在文件名也加下划线,你质疑别人可以,但是好歹也先看下手册。

回复yurke2014年08月19日
回复 Keith_hzw : GoodsClassModel.class.php这才是对应你表名的文件名,基本规范建议遵守

Keith_hzw2014年08月19日
你说D('Goodsclass'),再在里面加protected $trueTableName = "goods_class"; 这句来确定表名吧,,但如果表名有下滑线,会出错

aphpyzr2014年08月19日
D('GoodsClass');

回复云端o枫o02014年08月20日
此乃正解,楼主建议你多看看手册,还有命名规范里的说明!

thinkphp如果表名有下划线需要用Model的更多相关文章

  1. ThinkPHP如果表名有下划线需要用Model应该怎么做?

    最近遇到一个问题,在用TP做系统的时候,我建立的表是 “tp_admin_user” 但是要用到的模型是 “AdminUserModel.model.class.php”,应该如何做? 解决方法: & ...

  2. geotools导入shp文件到Oracle数据库时表名带下划线的问题解决

    问题: 最近在做利用geotools导入shp文件到Oracle表中,发现一个问题Oracle表名带下划线时导入失败,问题代码行: dsOracle.getFeatureWriterAppend(or ...

  3. 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  4. $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)

    自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...

  5. ORM( ORM查询13种方法3. 单表的双下划线的使用 4. 外键的方法 5. 多对多的方法 ,聚合,分组,F查询,Q查询,事务 )

    必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或 ...

  6. Latex—IEEE Latex模板 期刊名带下划线的问题解决

    其实期刊名应该是斜体字的,但是有可能默认模板会导致斜体变下划线的问题,解决方法如下 引用包: \usepackage{ulem} %to strike the words 然后再在: \bibliog ...

  7. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  8. 自定义T4模板去掉实体对象中的下划线

            在EF Power Tool 默认使用的T4模板中,如果数据库表有下划线,那么生成的实体也有下划线,但是我们实际使用的过程中,是不希望有下划线的,要解决这个问题,可以自定义这个T4模板 ...

  9. django ORM模型表的一对多、多对多关系、万能双下划线查询

    一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...

随机推荐

  1. 【LeetCode 100_二叉树_遍历】Same Tree

    解法一:递归 bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL && q == NULL) return true; ...

  2. 201621123005《Java程序设计》第三周作业学习总结

    201621123005<Java程序设计>第三周 学习总结 标签(空格分隔): 未分类 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化 ...

  3. Python3 flask nginx uwsgi 环境搭建

    配置项目的时候一般使用虚拟环境,是各个项目的环境独立起来,更多方便管理.至于如何使用搜索即可,并不难 1.安装python3 yum -y install zlib-devel bzip2-devel ...

  4. iOS开发之如何应对苹果app的ipv6时代?

    WWDC2015苹果宣布在ios9支持纯IPv6的网络服务,并且要求2016年提交到app store的应用必须兼容纯IPv6的网络,要求适配的系统版本是ios9以上(包括ios9). 一 背景介绍 ...

  5. 细说并发4:Java 阻塞队列源码分析(上)

    上篇文章 趣谈并发3:线程池的使用与执行流程 中我们了解到,线程池中需要使用阻塞队列来保存待执行的任务.这篇文章我们来详细了解下 Java 中的阻塞队列究竟是什么. 读完你将了解: 什么是阻塞队列 七 ...

  6. python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  7. topcoder WCNMLGB

    点开题->断开连接->再也上不去->我玩NM

  8. [Linux]Ubuntu中的System Setting

    问题 使用Ubuntu的过程中,安装搜狗输入法,卸载了系统自带的ibus.输入法搞定后,发现System Setting没有了... 原因 因为在卸载ibus等软件时,会删除一些依赖包,删除过程可能会 ...

  9. 浅谈Eclipse调用Tomcat服务的原理

    浅谈Eclipse调用Tomcat服务的原理 转:http://www.thinksaas.cn/group/topic/341645/ 转:http://www.173it.cn/Html/?581 ...

  10. HihoCoder 1044 垃圾清理 (优化:状态压缩)

    状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市— ...