在新版升级的过程中,这个问题也是一个会容易遇到的问题之一。本文就主要来描述下新版中的模型是怎么智能识别对应的数据表名称的,以及如何最有效的进行升级工作。
我们知道,按照以前的方式,模型类的name就会自动对应为数据表的名称(不包含数据表前缀)。举个例子,在旧的版本里面,如果我有一个模型是(假设我们定义的数据表前缀是Think_,并以mysql为例):
PHP代码
- Class UserTypeModel extends Model{}
系统在实例化模型的时候会自动对应的数据表,识别的数据表名称应该是:
think_usertype
而新版的规则是同样的模型定义,识别的数据表名称变成了:
think_user_type
新版对于模型的命名规范采用了新的建议,采用类Java的驼峰法命名,之后能够智能识别,转换成有下划线的表名。但是这个规则不是固定的,是可以设置关闭的。
我们只需要在项目配置文件里面配置:
PHP代码
- 'TABLE_NAME_IDENTIFY' => false
就可以关闭这个智能规则,和之前一样识别了。
如果不想修改配置文件,还有一个办法,就是给每个模型增加tableName属性定义,因为系统的识别规则优先级低于属性定义,如果我们给模型定义了tableName或者tureTableName属性的话,那么是优先的。你的模型类名可以随便定义,把张三定义成李四都行:
PHP代码
class 李四Model extends Model{ protected
$tableName = '张三'; - }
需要注意的是tableName属性是不包含配置的数据表前缀和后缀的,如果是trueTableName的话就是完整的表名。