thinkphp新增字段无法插入到数据库是因为fields字段缓存

  今天在应用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();
  目前不支持联合主键的自动操作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值