ThinkPHP中的模型命名

当咱们建立一个UserModel类的时候,其实已经遵循了系统的约定。ThinkPHP要求数据库的表名和模型类的命名遵循必定的规范,首先数据库的表名和字段所有采用小写形式,模型类的命名规则是除去表前缀的数据表名称,而且首字母大写,而后加上模型类的后缀定义,例如:

UserModel 表示User数据对象,(假设数据库的前缀定义是 think_)其对应的数据表应该是think_user

UserTypeModel 对应的数据表是 think_user_type 
 
若是你的规则和系统的约定不符合,那么须要设置Model类的tableName属性。

在ThinkPHP的模型里面,有两个数据表名称的定义:

一、tableName不包含表先后缀的数据表名称,通常状况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不一样的时候才须要定义。

二、trueTableName包含先后缀的数据表名称,也就是数据库中的实际表名,该名称无需设置,只有当上面的规则都不适用的状况或者特殊状况下才须要设置。

下面举个例子来加深理解:

例如,在数据库里面有一个think_categories表,而咱们定义的模型类名称是CategoryModel,按照系统的约定,这个模型的名称是Category,对应的数据表名称应该是think_category(所有小写),可是如今的数据表名称是think_categories,所以咱们就须要设置tableName属性来改变默认的规则(假设咱们已经在配置文件里面定义了DB_PREFIX
为 think_)。

protected $tableName = 'categories';

注意这个属性的定义不须要加表的前缀think_

而对于另一种特殊状况,数据库中有一个表(top_depts)的前缀和其它表前缀不一样,不是think_
而是 top_,这个时候咱们就须要定义 trueTableName 属性了

protected $trueTableName = 'top_depts';

注意trueTableName须要完整的表名定义

除了数据表的定义外,还能够对数据库进行定义:

dbName定义模型当前对应的数据库名称,只有当你当前的模型类对应的数据库名称和配置文件不一样的时候才须要定义,例如:

protected $dbName = 'top';

另外,咱们来了解下表后缀的含义。表后缀一般状况下用处不大,由于这个和表的设计有关。可是个别状况下也是有用,例如,咱们在定义数据表的时候统一采用复数形式定义,下面是咱们设计的几个表名
think_users、think_categories、think_blogs,咱们定义的模型类分别是UserModel 、CategoryModel
、BlogModel,按照上面的方式,咱们必须给每一个模型类定义tableName属性。其实咱们能够经过设置表后缀的方式来实现相同的效果,咱们能够设置DB_SUFFIX
配置参数为s,那么系统在获取真实的表名的时候就会自动加上这个定义的表后缀,咱们就没必要给每一个模型类定义tableName属性了,而只是对categories这样的复数状况单独定义trueTableName属性就能够了。

数据库

相关文章
相关标签/搜索