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