tp数据表字段缓存

来源: https://www.cnblogs.com/webclz/p/4256334.html

在维护一个tp写的项目,因为需要在一个表(列如user)中新增一个字段status,但是不论如何就是无法给status赋值,查了资料才发现,原来是tp的数据表字段缓存在搞鬼。

在runtime>Data>_fields文件中找到对应的文件,文件名与表名同,这里是status.php,增加status。再次尝试,立马就可以了。

今天在应用thinkphp框架开发的程序做些二次开发修改, 其中有改动到数据结构,新增了几个字段. 调用 M(‘xxx’)->add($data)  插入值时,新增的字段数据总是插入不进去,每次都是默认的值, 一直找看是不是什么语句写错了, 找了半天也没出个所以然来.  后来将模型对象打印出来仔细查看,发现-他的 protected :成员变量 $fields  字段信息 中没有我刚才添加的新字段名称.  于是恍然—-缓存了…   清空缓存 . 终于可以正常插入数据了. 
        原来TP在配置文件中如果没有关闭字段缓存设置,默认是开启的,只要一运行它就会将数据字段信息缓存到~Runtime/Data/_files  文件夹下,并以数组方式存放在文件中.    protected $fields = array(….);
当然你也可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,在模型类里面添加fields属性即可,定义格式如下:
PHP代码
class UserModel extends Model{    
protected $fields = array(   
‘id’,    
‘username’,    
‘email’,    
‘age’,    
‘_pk’=>’id’,   
‘_autoinc’=>true   
)   
}   
其中_pk 表示主键字段名称 _autoinc 表示主键是否自动增长类型
可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存,如果在开发的时候经常变动数据库的结构,而不希望进行数据表的字段缓存,可以在项目配置文件中增加如下配置:
PHP代码
‘DB_FIELDS_CACHE’=>false   
调试模式下面由于考虑到数据结构可能会经常变动,所以默认是关闭字段缓存的。ThinkPHP的默认约定每个数据表的主键名采用统一的id作为标识,并且是自动增长类型的。系统会自动识别当前操作的数据表的字段信息和主键名称,所以即使你的主键不是id,也无需进行额外的设置,系统会自动识别。要在外部获取当前数据对象的主键名称,请使用下面的方法:
PHP代码
$pk = $Model->getPk();  
目前不支持联合主键的自动操作。
在个别情况下,可能不需要对当前操作的数据表进行字段缓存,或许是由于采用了动态方式或者当前模型根本没有任何相关的数据表,我们可以设置autoCheckFields属性来关闭某个模型类的字段获取和缓存。
使用getDbFields方法可以获取当前数据对象的全部字段信息:
PHP代码
$fields = $User->getDbFields();  
由于没有仔细看手册,浪费了不少时间.

 

转载于:https://www.cnblogs.com/pcx105/p/11088472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值