當我們建立乙個usermodel類的時候,其實已經遵循了系統的約定。thinkphp要求資料庫的表名和模型類的命名遵循一定的規範,首先資料庫的表名和字段全部採用小寫形式,模型類的命名規則是除去表字首的資料表名稱,並且首字母大寫,然後加上模型類的字尾定義,例如:
usermodel 表示user資料物件,(假設資料庫的字首定義是 think_)其對應的資料表應該是think_user
usertypemodel 對應的資料表是 think_user_type
如果你的規則和系統的約定不符合,那麼需要設定model類的tablename屬性。
在thinkphp的模型裡面,有兩個資料表名稱的定義:
1、tablename不包含表前字尾的資料表名稱,一般情況下預設和模型名稱相同,只有當你的表名和當前的模型類的名稱不同的時候才需要定義。
2、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屬性就可以了。
ThinkPhp中的命名空間
由於新版完全採用了命名空間的特性,因此只需要給類庫正確定義所在的命名空間,而命名空間的路徑與 類庫檔案的目錄一致,那麼就可以實現類的自動載入。例如,home student index 類的定義為 namespace home student class index 其所在的路徑是 thinkphp...
thinkPHP中模型類的定義
在thinkphp中基礎的模型類是think model,該類完成了基本的curd activerecord模式 連貫操作和統計查詢,一些高階特性被封裝到其他模型擴充套件中。基礎模型類的設計非常靈活,甚至可以無需進行任何模型定義,就可以進行相關表的orm和curd操作,只有在需要封裝單獨的業務邏輯時...
ThinkPHP命名規範
1 類檔案都是以 class.php 為字尾 2 確保檔案的命名和呼叫大小寫一致 3 類名和檔名一致 4 函式的命名使用小寫字母和下劃線的方式,例如 get client ip 5 action 控制器類以 action 為字尾,例如 useraction infoaction 6 模型類以mode...