ThinkPHP模型定義,thinkphp模型
模型類一般位於項目的Lib/Model 目錄下面,當我們建立一個UserModel類的時候,其實已經遵循了系統的約定。模型類的命名規則是除去表首碼的資料表名稱,採用駝峰法命名,並且首字母大寫,然後加上模型類的尾碼定義Model,例如:
| 模型名(類名) |
約定對應資料表(假設資料庫的首碼定義是 think_) |
| UserModel |
think_user |
| UserTypeModel |
think_user_type |
如果你的規則和上面的系統約定不符合,那麼需要設定Model類的資料表名稱屬性。
在ThinkPHP的模型裡面,有幾個關於資料表名稱的屬性定義:
| 屬性 |
說明 |
| tableName |
不包含表首碼的資料表名稱,一般情況下預設和模型名稱相同,只有當你的表名和當前的模型類的名稱不同的時候才需要定義。 |
| trueTableName |
包含首碼的資料表名稱,也就是資料庫中的實際表名,該名稱無需設定,只有當上面的規則都不適用的情況或者特殊情況下才需要設定。 |
| dbName |
定義模型當前對應的資料庫名稱,只有當你當前的模型類對應的資料庫名稱和設定檔不同的時候才需要定義。 |
下面舉個例子來加深理解,例如,在資料庫裡面有一個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需要完整的表名定義
除了資料表的定義外,還可以對資料庫進行定義,例如:
- protected $dbName = 'top';
4