zoukankan      html  css  js  c++  java
  • 定义字段

    定义字段

    1、为什么需要定义字段

    在每次实例化模型时,系统都会自动执行以下代码:

    调试界面如下图所示:

    由上图可知,我们每次调用模型进行实例化时,系统都会自动执行SQL语句:show columns,这条语句代表分析模型对应的数据表的表结构,在实际项目开发中,这个语句是非常耗时的,而且其对数据库的开销也非常大,那么在实际开发时最好缓存数据表的字段信息。

    2、字段缓存

    • 字段缓存保存在Runtime/Data/_fields/ 目录下面
    • 只要是不开启调试模式都会生成字段缓存(字段缓存可以单独设置关闭)。
    • 可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存
    • 可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,在模型类里面添加fields属性即可

     

    关闭APP_DEBUG后,字段会自动缓存,效果如下图所示:

    程序运行效果:

    我们发现,当我们开启了字段缓存后,系统会自动缓存数据表字段,以后每次实例化模型时,系统不会在分析表的表结构,而是去读缓存的文本文件。这样可以减少对数据库服务器的压力。

     

    实际项目开发中,我们也可以通过配置文件中配置参数来决定是否需要开启字段缓存:

    3、定义字段(重要)

    通过以上字段缓存我们发现,虽然我们可以解决ThinkPHP对数据库服务器的压力,但是其在实例化模型时需要读取缓存的文本文件来分析表的表结构,这样会造成服务器的I/O开销,有没有办法可以解决这个问题呢?

    答:可以使用定义字段的形式来解决这个问题

    路径:自定义模型文件中

    定义语法:

    protected $fields=array(数据表字段信息…);

    示例代码:

    以后我们在实例化自定义模型时,调试结果如下:

    4、定义主键(重要)

    在ThinkPHP中存在一个小bug,如果你的数据表中没有定义id主键,而是使用其他字段作为项目。其在操作时,如果使用主键作为操作条件,会产生异常结果。遇到这种情况,可以使用如下方式解决:

    在自定义模型中,可以$pk属性,如下图所示:

  • 相关阅读:
    约瑟夫问题的解法集锦
    java调用com组件将office文件转换成pdf
    hdu(1069)——Monkey and Banana(LIS变形)
    Unix网络编程之环境搭建
    atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t
    怎样使Dialog像Activity一样随心所欲的使用?
    获取全部分组中某列最大的行
    Class C++
    spring mvc +Mybatis3.1 整合的时候异常
    Linux 编译C++ 与 设置 Vim
  • 原文地址:https://www.cnblogs.com/nyxd/p/5366120.html
Copyright © 2011-2022 走看看