字段定義:系統(tǒng)會在模型首次實例化的時候自動獲取數(shù)據(jù)表的字段信息(而且只需要一次,以后會永久緩存字段信息,除非設(shè)置不緩存或者刪除),如果是調(diào)試模式則不會生成字段緩存文件,則表示每次都會重新獲取數(shù)據(jù)表字段信息.
字段緩存保存在Runtime/Data/_fields/ 目錄下面,緩存機(jī)制是每個模型對應(yīng)一個字段緩存文件(而并非每個數(shù)據(jù)表對應(yīng)一個字段緩存文件),命名格式是:
數(shù)據(jù)庫名.模型名.php
例如:
thinkphp.User.php 表示User模型生成的字段緩存文件
thinkphp.Article.php 表示Article模型生成的字段緩存文件
可以通過設(shè)置DB_FIELDS_CACHE 參數(shù)來關(guān)閉字段自動緩存,如果在開發(fā)的時候經(jīng)常變動數(shù)據(jù)庫的結(jié)構(gòu),而不希望進(jìn)行數(shù)據(jù)表的字段緩存,可以在項目配置文件中增加如下配置:
'DB_FIELDS_CACHE'=>false
注意:調(diào)試模式下面由于考慮到數(shù)據(jù)結(jié)構(gòu)可能會經(jīng)常變動,所以默認(rèn)是關(guān)閉字段緩存的.
如果需要顯式獲取當(dāng)前數(shù)據(jù)表的字段信息,可以使用模型類的getDbFields方法來獲取當(dāng)前數(shù)據(jù)對象的全部字段信息,例如:
$fields = $User->getDbFields();
如果你在部署模式下面修改了數(shù)據(jù)表的字段信息,可能需要清空Data/_fields目錄下面的緩存文件,讓系統(tǒng)重新獲取更新的數(shù)據(jù)表字段信息,否則會發(fā)生新增的字段無法寫入數(shù)據(jù)庫的問題.
如果不希望依賴字段緩存或者想提高性能,也可以在模型類里面手動定義數(shù)據(jù)表字段的名稱,可以避免IO加載的效率開銷,在模型類里面添加fields屬性即可,定義格式如下:
- class UserModel extends Model(){
- protected $fields=array('id','username','email','_pk'=>'','_autoinc'=>'true'............)
- }
其中_pk 表示主鍵字段名稱 _autoinc 表示主鍵是否自動增長類型,定義了fields屬性之后,就不會自動獲取數(shù)據(jù)表的字段信息了,如果有修改或者增加字段,必須手動修改fields屬性的值.
數(shù)據(jù)主鍵
系統(tǒng)會自動識別當(dāng)前操作的數(shù)據(jù)表的字段信息和主鍵名稱,默認(rèn)為id,在外部獲取當(dāng)前數(shù)據(jù)對象的主鍵名稱:$pk = $Model->getPk();
新聞熱點
疑難解答
圖片精選