模型命名规范

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. QT 相关书籍

    qt qucik 核心编程 个人觉得此书写得非常之好....这位作者的另外一本虽然没看过,估计也不错 https://bbs.csdn.net/topics/390942701?list=lz qt5 ...

  2. -Linux下的虚拟机安装与管理

    一.虚拟机安装 首先安转之前,要提前下载一个镜像,这里是:rhel-server-7.0-x86_64-dvd.iso 1)图形化方法 [1]在本机打开终端,切换到超级用户下.输入命令:virt-ma ...

  3. pip安装tensorflow出错怎么办

    随着人工智能的开发越来越多人参与,现在下载tensorflow 1.2版本也经常出错了,如下: 这时怎么办呢? 其实比较简单,可以通过pypi的网站来下载: https://pypi.python.o ...

  4. 如何去访问win8系统的共享文件夹

    关于共享,看过不少的贴子,觉得搞得很复杂.我看起来也很头痛.晕头转向的.其实我们作为家庭用户来说,不想搞得那么复杂,我们只要能做到能够从一台电脑访问另一台电脑的共享文件夹就可以了,这样我们就可以任意从 ...

  5. yum安装php5.5,php5.6和php7.0

    本文主要介绍在CentOS系统下的php多个版本的安装使用 1.清理系统上的旧版本php 1)查询已安装的php软件 rpm -qa|grep php* yum list installed | gr ...

  6. 【Python爬虫学习笔记(1)】urllib2库相关知识点总结

    1. urllib2的opener和handler概念 1.1 Openers: 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例).正常情况下,我们使 ...

  7. Eclipse web工程 部署 三种方式 1

    Eclipse web工程 部署 三种方式 1.run on 前提: 安装 好 eclipse.jdk.tomcat 然后 新建一个 web工程 注意此处Default output folder 最 ...

  8. BZOJ3675 Apio2014 序列分割 【斜率优化】

    Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首 ...

  9. 接口测试基础——第6篇unittest模块(三)

    今天是unittest最后一讲,我们解决一下如何只运行一次setUp和tearDown方法以及简单的数据驱动的知识. 1.只运行一次setUp和tearDown方法 很简单,只需要把setUp和tea ...

  10. cnpm 私服搭建(基于docker)

    备注:   使用docker-compose 进行安装 1. 代码clone git clone https://github.com/cnpm/cnpmjs.org.git 2. docker bu ...