内容简介:ThinkPHP5.2增加了新的查询表达式对
5.2
在经过几个月的测试版本迭代后,正式进入候选版本。之后的重点工作会是扩展以及文档的完善。当然,不排除核心还有微调的可能。
ThinkPHP5.2 RC1
版本继上个版本
beta3
版本
发布以来,主要更新如下:
新特性
支持 FIND_IN_SET
查询
增加了新的查询表达式对 FIND_IN_SET
的支持,使用下面的查询即可:
Db::name('user')->where('group_list', 'find in set', 2)->select();
增加了分区查询支持
增加了对分区的支持(需要MySQL 5.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
方法对自动多应用的支持
以上所述就是小编给大家介绍的《ThinkPHP 发布 5.2 RC1 版本,诸多查询改进》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 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 版本,诸多查询改进
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
离心力:互联网历史与数字化未来
[英] 乔尼·赖安(Johnny Ryan) / 段铁铮 / 译言·东西文库/电子工业出版社 / 2018-2-1 / 68.00元
★一部详实、严谨的互联网史著作; ★哈佛、斯坦福等高校学生必读书目; ★《互联网的未来》作者乔纳森·L. 齐特雷恩,《独立报》《爱尔兰时报》等知名作者和国外媒体联合推荐。 【内容简介】 虽然互联网从诞生至今,不过是五六十年,但我们已然有必要整理其丰富的历史。未来的数字世界不仅取决于我 们的设想,也取决于它的发展历程,以及互联网伟大先驱们的理想和信念。 本书作者乔尼· ......一起来看看 《离心力:互联网历史与数字化未来》 这本书的介绍吧!