久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

ThinkPHP開發(fā)指南-模型之模型命名

來自站長百科
跳轉(zhuǎn)至: 導航、? 搜索

導航:上一頁

當我們創(chuàng)建一個UserModel類的時候,其實已經(jīng)遵循了系統(tǒng)的約定。ThinkPHP要求數(shù)據(jù)庫的表名和模型類的命名遵循一定的規(guī)范,首先數(shù)據(jù)庫的表名和字段全部采用小寫形式,模型類的命名規(guī)則是除去表前綴的數(shù)據(jù)表名稱,并且首字母大寫,然后加上模型類的后綴定義.

例如:UserModel 表示User數(shù)據(jù)對象,(假設數(shù)據(jù)庫的前綴定義是 think_)其對應的數(shù)據(jù)表應該是think_user , UserTypeModel 對應的數(shù)據(jù)表是 think_user_type

如果你的規(guī)則和系統(tǒng)的約定不符合,那么需要設置Model類的tableName屬性。

在ThinkPHP的模型里面,有兩個數(shù)據(jù)表名稱的定義:

  1. tableName 不包含表前后綴的數(shù)據(jù)表名稱,一般情況下默認和模型名稱相同,只有當你的表名和當前的模型類的名稱不同的時候才需要定義。
  2. trueTableName 包含前后綴的數(shù)據(jù)表名稱,也就是數(shù)據(jù)庫中的實際表名,該名稱無需設置,只有當上面的規(guī)則都不適用的情況或者特殊情況下才需要設置。

下面舉個例子來加深理解:

例如,在數(shù)據(jù)庫里面有一個think_categories表,而我們定義的模型類名稱是CategoryModel,按照系統(tǒng)的約定,這個模型的名稱是Category,對應的數(shù)據(jù)表名稱應該是think_category(全部小寫),但是現(xiàn)在的數(shù)據(jù)表名稱是think_categories,因此我們就需要設置tableName屬性來改變默認的規(guī)則(假設我們已經(jīng)在配置文件里面定義了DB_PREFIX 為 think_)。

PHP代碼

protected $tableName = 'categories';   

注意:這個屬性的定義不需要加表的前綴think_ . 而對于另外一種特殊情況,數(shù)據(jù)庫中有一個表(top_depts)的前綴和其它表前綴不同,不是think_ 而是 top_,這個時候我們就需要定義 trueTableName 屬性了

PHP代碼

protected $trueTableName = 'top_depts';  

注意trueTableName需要完整的表名定義,除了數(shù)據(jù)表的定義外,還可以對數(shù)據(jù)庫進行定義:

dbName定義模型當前對應的數(shù)據(jù)庫名稱,只有當你當前的模型類對應的數(shù)據(jù)庫名稱和配置文件不同的時候才需要定義,例如:

PHP代碼

protected $dbName = 'top'; 

另外,我們來了解下表后綴的含義。表后綴通常情況下用處不大,因為這個和表的設計有關。但是個別情況下也是有用,例如,我們在定義數(shù)據(jù)表的時候統(tǒng)一采用復數(shù)形式定義,下面是我們設計的幾個表名 think_users、think_categories、think_blogs,我們定義的模型類分別是UserModel 、CategoryModel 、BlogModel,按照上面的方式,我們必須給每個模型類定義tableName屬性。其實我們可以通過設置表后綴的方式來實現(xiàn)相同的效果,我們可以設置DB_SUFFIX 配置參數(shù)為s,那么系統(tǒng)在獲取真實的表名的時候就會自動加上這個定義的表后綴,我們就不必給每個模型類定義tableName屬性了,而只是對categories這樣的復數(shù)情況單獨定義trueTableName屬性就可以了。