码迷,mamicode.com
首页 > 其他好文 > 详细

定义字段

时间:2016-04-08 00:37:50      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

定义字段

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属性,如下图所示:

技术分享

定义字段

标签:

原文地址:http://www.cnblogs.com/nyxd/p/5366120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!