• thinkphp如果表名有下划线需要用Model


    模型命名规范

    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. # 使用
    10. D('HelloWorld')->getYourHeader();
    11. # 模型名称不能使用下划线,如果是使用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日
    此乃正解,楼主建议你多看看手册,还有命名规范里的说明!
  • 相关阅读:
    数据操作-apply函数族
    11.盛水最多的容器
    canvas绘图
    Nodejs事件监听模块
    http性能测试
    源码解读
    nodejs的一些概念
    http知识补充
    querystring处理参数小利器
    url网址解析的好帮手
  • 原文地址:https://www.cnblogs.com/caicaizi/p/5603274.html
Copyright © 2020-2023  润新知