• 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();  
    由于没有仔细看手册,浪费了不少时间.
    
  • 相关阅读:
    【RobotFramework自动化测试】数据库值验证
    【Python】列表各种操作
    python开发之路之线程、进程、协程
    python开发之路SocketServer
    python开发之路之I/O多路复用
    python开发之路1---多并发Ftp的开发
    python网络编程1
    python面向对象编程(扩展) && python中的反射操作
    python基础5-面向对象编程
    基于python实现的计算器
  • 原文地址:https://www.cnblogs.com/pcx105/p/11088472.html
Copyright © 2020-2023  润新知