点击右上方,关注开源中国OSC头条号,获取最新手艺资讯
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")', '2020')->select();
User::whereFieldRaw('date_format("create_time", "%Y")', '>', '2018')->select();
Query类的update方式支持获取模子的更新条件
现在可以直接使用模子的查询条件作为Db类update方式的数据更新条件,例如:
$user = User::find(1);
$user->field(['name'])->update(['name' => 'thinkphp']);
数据集类增添快捷查询(过滤)方式
thinkCollection类增添whereLike/whereNotLike/whereIn/whereNotIn/whereBetween/whereNotBetween等快捷方式,用于更利便的举行数据筛选而替换使用不够直观的where方式。
增添optimize:facade指令
为什么要做小程序,小程序开发的必要性解读
可以在内陆开发的时刻使用该指令为Facade类天生对应类的方式注释。你只需要在界说Facade类的时刻,在类的注释中添加 @mixin 选项,例如使用@mixin thinkDb注释后,使用optimize:facade指令后,就会在类的注释中自动天生thinkDb类的相关public方式注释,利便IDE自动提醒,每个类的方式返回值类型最好明确指定(没有返回值的则使用void),否则注释中会使用mixed返回类型。
增添新的表达式查询剖析扩展
增添了新的thinkdbExpression类(原来的Expression类已经更改为Raw类)用于查询表达式的扩展剖析,你只需要自界说一个表达式剖析类,例如:
<?php
namespace appcommonexpression;
use thinkdbExpression;
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 appcommonexpressionRlike('^think'))->select();
提供了关闭事宜机制的方式
若是你完全不需要使用事宜机制,可以在入口文件中使用withEvent方式关闭事宜功效。
(new App())->withEvent(false)->run()->send();
不外值得提醒的是,新版的路由功效、多语言支持和请求缓存功效都是行使了事宜机制响应的。
用法调整
原来Query类的raw方式移动到Db类
虽然用法上没有改变,但Db::raw()方式的挪用效率会更高一些。或者你可以直接使用新的助手函数raw替换Db::raw。
原来的Expression类改为Raw类
原来的thinkdbExpression类更改为thinkdbRaw类,加倍贴切。
多对多关联的pivotDataName方式更名为name方式
使用加倍简练的name方式替换原来的pivotDataName方式。
废弃用法和参数
作废Query类的extend方式
作废了Query类的extend方式,若是需要扩展查询方式,建议自界说Query类并继续系统的thinkdbQuery类即可,然后在模子中界说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属性
- 增添thinkfacadeRuleName类
- 增添whereFieldRaw查询方式
- 改善自动多应用名称获取
- App类增添withEvent方式支持关闭事宜机制
- 改善Dispatch类对var_dump的支持
- 改善hasMany的withCount自关联
- 修正纯数字检测参数类型转换问题
- 修正raw助手函数
- mysql支持find_in_set查询
- 改善url方式对自动多应用的支持
本文来源于自互联网,不代表n5网立场,侵删。发布者:虚拟资源中心,转载请注明出处:https://www.n5w.com/189116.html