模型命名规范

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. Mac环境下svn的使用(转)

    本文目录 一.创建代码仓库,用来存储客户端所上传的代码 二.配置svn的用户权限 三.使用svn客户端功能 在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下, ...

  2. c# IE 清除缓存

    Response.Buffer = true; Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-); Response.Expir ...

  3. dpkg: 处理归档 /var/cache/apt/archives/swig2.0_2.0.12-1ubuntu4_amd64.deb (--unpack)时出错:

    问题: sudo apt-get upgrade 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 正在计算更新... 完成下列软件包的版本将保持不变: lib ...

  4. [置顶] Isolation Forest算法实现详解

    本文算法完整实现源码已开源至本人的GitHub(如果对你有帮助,请给一个 star ),参看其中的 iforest 包下的 IForest 和 ITree 两个类: https://github.co ...

  5. KAFKA 0.11 RHEL6.5安装

    KAFKA简介 KAFKA是一款分布式消息发布和订阅的系统. 官网:http://kafka.apache.org/ 1.下载KAFKA及JDK KAFKA下载地址: http://kafka.apa ...

  6. 重学CPP

    LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt After install ...

  7. iOS中求出label中文字的行数和每一行的内容

    今天遇到一个需求,需要计算label中文字的行数.想了好久也没想到好的解决方法,就在网上找了下.结果发现一篇文章是讲这个的.这部分代码不但能够求出一个label中文字行数,更厉害的是能够求出每一行的内 ...

  8. OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(上)

    这篇博文难产了很久,原来是打算一周更新一篇的,上周原计划写MVC,但是写了一半,发现带入了太多的细节,不太符合这个入门系列的主题. 当我们学习一个新的技能的时候,如果一开始就面对大量的细节,很容易陷入 ...

  9. 真机调试watch的一系列bug

    真机调试watch的一系列bug 系列一 WatchKit 2.0 app's bundle ID com.jiaoshi.memoKB is not prefixed by the parent a ...

  10. Atocder ARC082 F-Sandglass 【思维题】*

    Atocder ARC082 F-Sandglass Problem Statement We have a sandglass consisting of two bulbs, bulb A and ...