模型命名规范

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日
此乃正解,楼主建议你多看看手册,还有命名规范里的说明!

转载于:https://www.cnblogs.com/caicaizi/p/5603274.html

thinkphp如果表名有下划线需要用Model相关推荐

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

    最近遇到一个问题,在用TP做系统的时候,我建立的表是 "tp_admin_user" 但是要用到的模型是 "AdminUserModel.model.class.php& ...

  2. mysql 表名带下划线_在MySQL中可以使用下划线作为表名吗?

    是的,我们可以在表名周围使用反引号将下划线添加为表名.以下是语法-INSERT INTO `yourTableName` values(yourValue1,.......N); 让我们首先创建一个表 ...

  3. linux mysql 修改表名_Linux下mysql怎么设置表名?

    Linux下mysql可以通过"ALTER TABLE 旧表名 RENAME [TO] 新表名;"语句来修改表名:还可以通过配置my.cnf文件,修改"lower_cas ...

  4. pytorch中(函数名有下划线和没有下划线)clamp和clamp_的区别

    在pytorch中,我们需要注意,对于tensor的操作时候是in-place类型. in-place类型是指,但在一个tensor上操作了之后,是直接修改了这个tensor,还是返回一个新的tens ...

  5. SolidWorks打开step格式后零件名变成下划线的解决方法

    打开SolidWorks,打开选项,找到"系统选项"中的"导入",将"文件格式"中的启用3DInterconnect前的√取消即可.

  6. JPA映射数据库mysql表名,字段名大小写转化,下划线分割.

    遇到小写加下划线"_" 的命名 spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm ...

  7. mysql 参数名 下划线,MySQL表名称中的下划线会引起问题吗?

    不,MySQL表名中的下划线不会有任何问题.您将在MySQL表名称中出现破折号. 这是演示,使用表名的下划线没有任何问题-_StudentTrackerDemo 让我们在创建表时看到相同的内容.创建表 ...

  8. Python中的方法名前加下划线

    在Python中,方法名前加下划线通常有以下几种用法和约定: 单个前导下划线(_methodName):这是一种约定,用于指示该方法是类的内部使用方法,应该被视为私有方法.虽然在语法上并没有强制限制, ...

  9. SpringBoot - MyBatis-Plus使用详解2(设置实体类对应的表名、字段名 )

    二.设置模型对应的表名.字段名 1,设置关联的表名 (1)默认情况下,如果数据库表是使用标准的下划线命名,并且能对应上实体类的类名,我们就不需要特别去手动匹配.比如有张 user_info 表,那么会 ...

最新文章

  1. 河南城建学院linux期末试题,河南城建学院09-10(上)期末试题.ppt
  2. php用w获取的星期不对,php获取时间是星期几的方法是什么
  3. Spring Boot中使用LDAP来统一管理用户信息
  4. mule和activemq_Mule ESB,ActiveMQ和DLQ
  5. 【面向对象】面向对象程序设计测试题1-Java语言的发展与特性测试题
  6. Excel 宏写入文件乱码解决
  7. 为Pokémon Go而生的聊天软件GoChat,坐拥百万用户却快要破产
  8. 云计算介绍-1.2,IaaS\PaaS\SaaS比较
  9. 写软件开发需求你必须掌握的规格
  10. bufferedreader读取中文乱码_Python OpenCV与中文相关的三个常见问题
  11. 神马是敏捷?(3)——敏捷在中国的水土不服
  12. 操作系统高响应比优先调度算法模拟实验
  13. 有限单元法基本原理和数值方法_有限元法基本原理
  14. 详解高斯过程回归和核贝叶斯线性回归
  15. animal farm 第一章阅读笔记
  16. AI视觉传感器作用和应用介绍
  17. 每个前端都值得拥有自己的组件库,就像每个冬天都拥有春秋裤
  18. 【CSS—美化网页元素】
  19. 中瀛手机销售软件 绘图软件
  20. 常见商品期货量化交易策略

热门文章

  1. cuda第一次计算耗时_CUDA优化的冷知识10 | GPU卡和Jetson上显存优化的特色
  2. STM32F0308DISCOVERY探索套件
  3. 单人制作游戏手册之五:好看的素材令人心旷神怡!
  4. 前端性能优化(PC版)
  5. ORACLE_关于OGG参数.ENABLE_GOLDENGATE_REPLICATION
  6. AIX使用vi时报History file has no read permission
  7. 小米11和华为p40pro哪个好
  8. C:如何分解整数(从末位往前取以及从首位往后取)
  9. NOIP 2013 day1
  10. java 保护内存操作的方法