WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機(jī)
ThinkPHP開發(fā)指南-模型之模型命名
導(dǎo)航:上一頁
當(dāng)我們創(chuàng)建一個UserModel類的時候,其實(shí)已經(jīng)遵循了系統(tǒng)的約定。ThinkPHP要求數(shù)據(jù)庫的表名和模型類的命名遵循一定的規(guī)范,首先數(shù)據(jù)庫的表名和字段全部采用小寫形式,模型類的命名規(guī)則是除去表前綴的數(shù)據(jù)表名稱,并且首字母大寫,然后加上模型類的后綴定義.
例如:UserModel 表示User數(shù)據(jù)對象,(假設(shè)數(shù)據(jù)庫的前綴定義是 think_)其對應(yīng)的數(shù)據(jù)表應(yīng)該是think_user , UserTypeModel 對應(yīng)的數(shù)據(jù)表是 think_user_type
如果你的規(guī)則和系統(tǒng)的約定不符合,那么需要設(shè)置Model類的tableName屬性。
在ThinkPHP的模型里面,有兩個數(shù)據(jù)表名稱的定義:
- tableName 不包含表前后綴的數(shù)據(jù)表名稱,一般情況下默認(rèn)和模型名稱相同,只有當(dāng)你的表名和當(dāng)前的模型類的名稱不同的時候才需要定義。
- trueTableName 包含前后綴的數(shù)據(jù)表名稱,也就是數(shù)據(jù)庫中的實(shí)際表名,該名稱無需設(shè)置,只有當(dāng)上面的規(guī)則都不適用的情況或者特殊情況下才需要設(shè)置。
下面舉個例子來加深理解:
例如,在數(shù)據(jù)庫里面有一個think_categories表,而我們定義的模型類名稱是CategoryModel,按照系統(tǒng)的約定,這個模型的名稱是Category,對應(yīng)的數(shù)據(jù)表名稱應(yīng)該是think_category(全部小寫),但是現(xiàn)在的數(shù)據(jù)表名稱是think_categories,因此我們就需要設(shè)置tableName屬性來改變默認(rèn)的規(guī)則(假設(shè)我們已經(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ù)庫進(jìn)行定義:
dbName定義模型當(dāng)前對應(yīng)的數(shù)據(jù)庫名稱,只有當(dāng)你當(dāng)前的模型類對應(yīng)的數(shù)據(jù)庫名稱和配置文件不同的時候才需要定義,例如:
PHP代碼
protected $dbName = 'top';
另外,我們來了解下表后綴的含義。表后綴通常情況下用處不大,因為這個和表的設(shè)計有關(guān)。但是個別情況下也是有用,例如,我們在定義數(shù)據(jù)表的時候統(tǒng)一采用復(fù)數(shù)形式定義,下面是我們設(shè)計的幾個表名 think_users、think_categories、think_blogs,我們定義的模型類分別是UserModel 、CategoryModel 、BlogModel,按照上面的方式,我們必須給每個模型類定義tableName屬性。其實(shí)我們可以通過設(shè)置表后綴的方式來實(shí)現(xiàn)相同的效果,我們可以設(shè)置DB_SUFFIX 配置參數(shù)為s,那么系統(tǒng)在獲取真實(shí)的表名的時候就會自動加上這個定義的表后綴,我們就不必給每個模型類定義tableName屬性了,而只是對categories這樣的復(fù)數(shù)情況單獨(dú)定義trueTableName屬性就可以了。