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屬性就能夠了。

數據庫

相關文章
相關標籤/搜索