内容简介:5.2在经过几个月的测试版本迭代后,正式进入候选版本。之后的重点工作会是扩展以及文档的完善。当然,不排除核心还有微调的可能。 ThinkPHP5.2RC1版本继上个版本beta3版本发布以来,主要更新如下: 新特性 支持F...
5.2
在经过几个月的测试版本迭代后,正式进入候选版本。之后的重点工作会是扩展以及文档的完善。当然,不排除核心还有微调的可能。
ThinkPHP5.2RC1
版本继上个版本beta3
版本发布以来,主要更新如下:
新特性
支持FIND_IN_SET
查询
增加了新的查询表达式对FIND_IN_SET
的支持,使用下面的查询即可:
Db::name('user')->where('group_list', 'find in set', 2)->select();
增加了分区查询支持
增加了对分区的支持(需要MySQL5.6+
版本),例如你对user
表分了p1
和p2
两个分区,你可以使用下面的查询:
Db::name('user')->partition('p1')->insert(['name' => 'think']); Db::name('user')->partition(['p1', 'p2'])->select(); Db::name('user')->partition(['p1', 'p2'])->where('name', 'think')->update(['name' => 'thinkphp']); Db::name('user')->partition('p1')->where('name', 'think')->delete();
增加了ON DUPLICATE UPDATE
支持
支持ON DUPLICATE UPDATE
,例如:
Db::name('user')->duplicate(['score' => 10])->insert(['name' => 'think']);
增加extra
方法设置查询额外参数
extra
方法可以用于CURD
查询,例如:
Db::name('user')->extra('IGNORE')->insert(['name' => 'think']); Db::name('user')->extra('DELAYED')->insert(['name' => 'think']); Db::name('user')->extra('SQL_BUFFER_RESULT')->select();
新增单个数据改为使用更清晰和高效的INSERT SET
语法,例如下面的查询
Db::name('user')->insert(['name' => 'think', 'score' => 100]);
实际生成的 SQL 语句是
INSERT INTO user SET `name` = 'think', `score` = 100
增加whereFieldRaw
查询方法
该方法用于对字段使用SQL函数查询,例如:
User::whereFieldRaw('date_format("create_time", "%Y")', '2019')->select(); User::whereFieldRaw('date_format("create_time", "%Y")', '>', '2018')->select();
Query
类的update
方法支持获取模型的更新条件
现在可以直接使用模型的查询条件作为Db
类update
方法的数据更新条件,例如:
$user = User::find(1); $user->field(['name'])->update(['name' => 'thinkphp']);
数据集类增加快捷查询(过滤)方法
think\Collection
类增加whereLike
/whereNotLike
/whereIn
/whereNotIn
/whereBetween
/whereNotBetween
等快捷方法,用于更方便的进行数据筛选而替代使用不够直观的where
方法。
增加optimize:facade
指令
可以在本地开发的时候使用该指令为Facade
类生成对应类的方法注释。你只需要在定义Facade类的时候,在类的注释中添加 @mixin
选项,例如使用@mixin think\Db
注释后,使用optimize:facade
指令后,就会在类的注释中自动生成think\Db
类的相关public
方法注释,方便IDE自动提示,每个类的方法返回值类型最好明确指定(没有返回值的则使用void
),否则注释中会使用mixed
返回类型。
增加新的表达式查询解析扩展
增加了新的think\db\Expression
类(原来的Expression
类已经更改为Raw
类)用于查询表达式的扩展解析,你只需要自定义一个表达式解析类,例如:
<?php namespace app\common\expression; use think\db\Expression; class Rlike extends Expression { /** * 分析查询表达式 * * @param Query $query 查询对象 * @param string $key * @param string $exp * @param string $field * @param integer $bindType * @return string */ public function parse(Query $query, string $key, string $exp, string $field, int $bindType): string { if ($this->value instanceof Raw) { $value = $this->value->getValue(); } else { $value = $this->value; } return $key .' RLIKE ' . $value ; } }
现在我们就可以使用下面的查询语法了:
User::where('name', 'rlike', new \app\common\expression\Rlike('^think'))->select();
提供了关闭事件机制的方法
如果你完全不需要使用事件机制,可以在入口文件中使用withEvent
方法关闭事件功能。
(new App())->withEvent(false)->run()->send();
不过值得提醒的是,新版的路由功能、多语言支持和请求缓存功能都是利用了事件机制响应的。
用法调整
原来Query
类的raw
方法移动到Db
类
虽然用法上没有改变,但Db::raw()
方法的调用效率会更高一些。或者你可以直接使用新的助手函数raw
替代Db::raw
。
原来的Expression
类改为Raw
类
原来的think\db\Expression
类更改为think\db\Raw
类,更加贴切。
多对多关联的pivotDataName
方法更名为name
方法
使用更加简洁的name
方法替代原来的pivotDataName
方法。
废弃用法和参数
取消Query
类的extend
方法
取消了Query
类的extend
方法,如果需要扩展查询方法,建议自定义Query
类并继承系统的think\db\Query
类即可,然后在模型中定义query
属性或者配置数据库连接的query
参数为你的自定义类。
取消Request
类的hook
方法
由于不建议扩展Request
类的方法,该方法已经在最新版本中取消。
取消URL
参数模式配置
原来的URL参数模式配置参数url_param_type
,统一使用参数/值的方式。
更新日志
改进Url类
build
方法修复获取当前页码数据类型
修正
parseKey
方法传入数值的情况改进
optimize:config
指令对declare
申明的支持取消URL参数模式配置
增加
optimize:facade
指令用于生成facade
类的方法注释取消
Query
类的extend
方法原来的
Expression
类更改为Raw
类增加新的
Expression
类用于表达式查询扩展Collection
类增加whereLike
/whereNotLike
/whereIn
/whereNotIn
/whereBetween
/whereNotBetween
等快捷方法Query类的
raw
方法移动到Db类取消
Request
类的hook
方法修正
Route::view
方法优化模型获取器方法
多对多关联的
pivotDataName
方法更名为name
方法Query类增加
partition
/duplicate
/extra
方法改进 mysql 驱动支持分区和
duplicate
以及额外参数mysql驱动的
insert
方法改用更清晰的insert set
语法修正
Event
类bind
属性定义修正验证类的
append
一处bug改进
Query
类update
方法支持读取模型的更新条件取消模型类的
getUpdateWhere
方法统一使用getWhere
方法改进query类的
fetchArray
方法处理改进路由类取消
app
属性增加
think\facade\RuleName
类增加
whereFieldRaw
查询方法改进自动多应用名称获取
App类增加
withEvent
方法支持关闭事件机制改进
Dispatch
类对var_dump
的支持改进
hasMany
的withCount
自关联修正纯数字检测参数类型转换问题
修正
raw
助手函数mysql
支持find_in_set
查询改进
url
方法对自动多应用的支持
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Inkscape 0.92.3 发布,改进 Window 版本启动速度
- ThinkPHP5.1.32 版本发布 —— 改进缓存标签
- IntelliJ IDEA 2018.2 Beta 2 发布,功能改进版本
- ThinkPHP 5.0.21 版本发布,改进对 Swoole 的支持
- Three.js 最新版本改进了对 WebGL 的支持
- ThinkPHP 发布 5.2 RC1 版本,诸多查询改进
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
从入门到精通:Prezi完全解读
计育韬、朱睿楷、谢礼浩 / 电子工业出版社 / 2015-9 / 79.00元
Prezi是一款非线性逻辑演示软件,它区别于PowerPoint的线性思维逻辑;而是将整个演示内容铺呈于一张画布上,然后通过视角的转换定位到需要演示的位置,并且它的画布可以随时zoom in和zoom out,给演示者提供了一个更好的展示空间。 Prezi对于职场人士和在校学生是一个很好的发挥创意的工具,因为它的演示逻辑是非线性的,所以用它做出来的演示文稿可以如思维导图一样具有发散性,也可以......一起来看看 《从入门到精通:Prezi完全解读》 这本书的介绍吧!