ThinkPHP中的模型命名
当我们创建⼀个UserModel类的时候,其实已经遵循了系统的约定。ThinkPHP要求数据库的表名和模型类的命名遵循⼀定的规范,⾸先数据库的表名和字段全部采⽤⼩写形式,模型类的命名规则是除去表前缀的数据表名称,并且⾸字母⼤写,然后加上模型类的后缀定义,例如:
UserModel 表⽰User数据对象,(假设数据库的前缀定义是 think_)其对应的数据表应该是think_user
UserTypeModel 对应的数据表是 think_user_type
如果你的规则和系统的约定不符合,那么需要设置Model类的tableName属性。
在ThinkPHP的模型⾥⾯,有两个数据表名称的定义:
1、tableName不包含表前后缀的数据表名称,⼀般情况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不同的时候才需要定义。
2、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属性就可以了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论