# 升级指导 >[danger] 升级前请做好备份 [TOC=2,5] ## 5.0.180901升级到5.0.181212 ### 升级步骤 1.备份数据库,程序 2.覆盖新版本到老版本 3.清除缓存 数据库用法调整 >[info] 所有涉及数据库操作中`count`,`max`,`min`,`avg`,`sum`请不要在参数中增加空格 ## 5.0.180626升级到5.0.180901 ### 升级步骤 1.备份数据库,和程序 2.覆盖新版本到老版本 3. 同步钩子列表,在后台管理->插件中心->钩子列表->同步钩子列表 4. 清除缓存 ## 5.0.180525升级到5.0.180626 ### 升级步骤 1.备份数据库,和程序 2.覆盖新版本到老版本 3. 打开程序目录下 `update/update 5.0.180525 to 5.0.180626.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 4. 升级后请删除 `data/runtime`目录 5. 清除缓存 ### 前台默认模板渲染规则改进 `fetch`方法的默认模板规则调整为操作方法的名称(不含操作后缀)转换为小写+下划线方式,而不是原来的直接把操作名称转小写。 举个例子,你的控制器操作方法名如果是`helloWorld`,之前版本使用: ~~~ $this->fetch(); ~~~ 渲染输出的时候会定位到 `helloworld.html`模板文件,而新版会自动定位到`hello_world.html`模板文件。 > 对于指定模板渲染的`fetch`方法不受影响,对于非驼峰操作方法名也没有影响。 ## 5.0.180508升级到5.0.180525 ``` 可无缝升级 ``` ## 5.0.180501升级到5.0.180508 ``` 可无缝升级 ``` ## 5.0.180123升级到5.0.180501 ### 升级步骤 1.备份数据库,和程序 2.覆盖新版本到老版本 3. 同步钩子列表,在后台管理->插件中心(原插件管理)->钩子列表->同步钩子列表 4. 清除缓存 ### 由于TP升级需要进行如下代码用法调整 #### 数据库`EXP`用法调整 如果数组查询条件中使用了`exp`查询,必须做出如下调整: ~~~ // 错误 $where['id'] = ['exp', '>score']; $model->where($where)->find(); // 正确 $where['id'] = Db::raw('>score'); $model->where($where)->find(); // 正确 推荐写法 $model->whereExp('id', '>score')->find(); ~~~ 如果需要使用`exp`表达式更新数据,必须使用`Db::raw()`方法或者`exp`方法。下面用法不再支持: ~~~ // 错误 不再支持 $data['score'] = ['exp', 'score+1']; $model->where('id', 1)->update($data); // 正确 $data['score'] = Db::raw('score+1'); $model->where('id', 1)->update($data); // 正确 推荐用法 $model->where('id', 1)->exp('score', 'score+1')->update(); ~~~ #### 缓存用法调整 >[danger] 如果你使用了闭包查询条件,并且使用了默认的查询缓存`cache()`或者`cache(true)`,新版本会抛出异常,请使用`cache('key')`替代,避免因为查询缓存无效而影响业务。 > 如果你在`order`方法中使用了SQL函数,请使用`orderRaw`方法或者`Db::raw()`方法替代。 对于复杂的`field/where/order`字符串参数的,如果发现存在错误,尽量使用`fieldRaw/whereRaw/orderRaw`替代(只能传入字符串参数)。 #### 默认模板渲染规则改进 由于`fetch`方法和`view`函数的默认模板规则调整为操作方法的名称(不含操作后缀)转换为小写+下划线方式,而不是原来的直接把操作名称转小写。 举个例子,你的控制器操作方法名如果是`helloWorld`,之前版本使用: ~~~ $this->fetch(); // 或者 view(); ~~~ 渲染输出的时候会定位到 `helloworld.html`模板文件,而新版会自动定位到`hello_world.html`模板文件。 > 对于指定模板渲染的`fetch`方法和`view`助手函数不受影响,对于非驼峰操作方法名也没有影响。 ## 5.0.170927升级到5.0.180123 1.备份数据库,和程序 2.覆盖新版本到老版本 3. 打开程序目录下 `update/update 5.0.170927 to 5.0.180123.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 4. 升级后请删除 `data/runtime`目录 5. 同步钩子列表,在后台管理->插件中心(原插件管理)->钩子列表->同步钩子列表 6. 清除缓存 ### 升级注意事项 **1.取消文章列表用户关联查询** 在文章列表中请将原来的`$vo.user_id`等用户相关信息获取改为`$vo.user.id`,`$vo.user.user_nickname`等 **2.优化注册和找回页面数字验证码获取逻辑** 此次升级中获取数字验证码时必须有图片验证码,防止有人用机器发送短信验证,请升级时注意此逻辑的变更 **文档已经同步到5.0.180123版本,请大家仔细阅读** ## 5.0.170808升级到5.0.170927 1. 覆盖新版本到老版本 2. 打开程序目录下 `update/update 5.0.170808 to 5.0.170912.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 3. 升级后请删除 `data/runtime`目录 ## 5.0.170607升级到5.0.170927 1. 覆盖新版本到老版本 2. 打开程序目录下 `update/update 5.0.170607 to 5.0.170808.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 3. 打开程序目录下 `update/update 5.0.170808 to 5.0.170912.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 4. 升级后请删除 `data/runtime`目录 ## 5.0.170520 RC4升级到5.0.170607 打开程序目录下 `update/update to 5.0.170607.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 ## 5.0.170505 RC3升级到5.0.170520 RC4 打开程序目录下 `update/update to 5.0.170520.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 ## 5.0.170422 RC2升级到5.0.170505 RC3 打开程序目录下 `update/update to 5.0.170505.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件 ## 5.0.170401 RC1升级到5.0.170422 RC2 打开程序目录下 `update/update to 5.0.170422.sql` 把表前缀`cmf_`换成你自己的表前缀,然后执行此文件