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