每个模型类操作着每个对应的数据表,在大多数情况下,系统会自动获取当前数据表的字段信息,而当模型类第一次实例化时,系统会自动缓存字段,并且永久缓存,除非删除了运行时缓存或者设置不缓存。
如果调试模式下,则不会生成字段缓存文件,每次都是从数据表里重新获取,生成缓存的目的显而易见,就是为了快速响应。ThinkPHP默认是开启字段缓存,因为在实际运行中不会更改字段结构。
字段缓存文件保存在Runtime/Data/fields/目录里,当你在开发阶段,字段和表会经常变动,所以要关闭缓存,关闭缓存的方法:
‘DB_FIELDS_CACHE’=>false//开启了调试模式,自动关闭
//查看字段结构
var_dump($user->getDbfields());
也可以使用手动定义数据字段的方式取代字段缓存方式,这种方式可以提高性能,避免IOk开销
//手动定义数据表字段,_pk表示主键
class UserModel extends Model{
protect $fields = array('id','user','_pk'=>'id');
}
//type 定义每个字段的类型,可以永远字段验证
class UserModel extends Model{
protected $fields = array('id','user','_pk'=>'id',
'type'=>array(‘id’=>smallint,'user'=>'varchar');
}