
点击右上方关注开源中国OSC头条号,获取最新工艺资讯。
5.2经过几个月的测试版本迭代,正式进入发布候选。之后,重点工作将是扩充和完善文件。当然,还有一种可能是不清洁焦点的微调。
自上一个版本beta3发布以来,ThinkPHP5.2RC1版本5.2RC1已更新如下:
新功能
支持在集合中查找查询。
添加了一个新的查询表达式来支持FIND_IN_SET。只需使用以下查询:
Db::name(‘user’)-gt;where(‘group_list’, ‘find in set’, 2)-gt;select();
添加了分区查询支持。
增加了对分区的支持(需要MySQL5.6+版本5.6+)。例如,如果将用户表分为两个分区p1和p2,则可以使用以下查询:
Db::name(‘user’)-gt;partition(‘p1’)-gt;insert([‘name’ =gt; ‘think’]);Db::name(‘user’)-gt;partition([‘p1’, ‘p2’])-gt;select();Db::name(‘user’)-gt;partition([‘p1’, ‘p2’])-gt;where(‘name’, ‘think’)-gt;update([‘name’ =gt; ‘thinkphp’]);Db::name(‘user’)-gt;partition(‘p1’)-gt;where(‘name’, ‘think’)-gt;delete();
添加了对重复更新的支持。
支持重复更新,例如:
Db::name(‘user’)-gt;duplicate([‘score’ =gt; 10])-gt;insert([‘name’ =gt; ‘think’]);
添加额外模式以设置查询额外参数。
额外模式可用于CURD查询,例如:
Db::name(‘user’)-gt;extra(‘IGNORE’)-gt;insert([‘name’ =gt; ‘think’]);Db::name(‘user’)-gt;extra(‘DELAYED’)-gt;insert([‘name’ =gt; ‘think’]);Db::name(‘user’)-gt;extra(‘SQL_BUFFER_RESULT’)-gt;select();
添加单个数据以使用更清晰、更有效的INSERT SET语法,如以下查询。
Db::name(‘user’)-gt;insert([‘name’ =gt; ‘think’, ‘score’ =gt; 100]);
现实中诞生的SQL语句是
INSERT INTO user SET `name` = ‘think’, `score` = 100
添加whereFieldRaw查询模式
此方法用于使用SQL函数查询字段,例如:
User::whereFieldRaw(‘date_format(“create_time”, “%Y”)’, ‘2020’)-gt;select();User::whereFieldRaw(‘date_format(“create_time”, “%Y”)’, ‘gt;’, ‘2018’)-gt;select();
查询类的更新方式支持获取模具的更新条件。
现在可以直接使用模型的查询条件作为Db类更新模式的数据更新条件,例如:
$user = User::find(1);$user-gt;field([‘name’])-gt;update([‘name’ =gt; ‘thinkphp’]);
向数据集类添加快速查询(筛选)方法。
ThinkCollection类增加了where like/where not like/where not in/where between/where not between等快捷方式。,用于更方便地过滤数据,而不是使用不太直观的where方法。
添加优化:外观指令。
为什么要做小程序以及小程序开发的必要性
你可以用这个指令来注解在内陆开发的时候,Facade类自然对应类的方式。您只需要在定义Facade类的时候在类的注释中添加@ mixing选项。比如使用@ mixing thinkDb注释和optimize:facade指令后,thinkDb类的相关公共注释会自动在该类的注释中生成,便于IDE自动提醒。最好明确指定每个类的返回值类型(如果没有返回值就用void),否则在注释中会使用混合返回类型。
添加新的表达式查询解析扩展
添加了一个新的thinkdbExpression类(原来的Expression类已更改为Raw类),用于查询表达式的扩展解析。您只需要定义一个表达式解析类,例如:
lt;?phpnamespace 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-gt;value instanceof Raw) { $value = $this-gt;value-gt;getValue(); } else { $value = $this-gt;value; } return $key .’ RLIKE ‘ . $value ; }}
现在我们可以使用以下查询语法:
User::where(‘name’, ‘rlike’, new appcommonexpressionRlike(‘^think’))-gt;select();
提供关闭物质机制的方法。
如果完全不需要使用事件机制,可以使用withEvent关闭门户文件中的事件效果。
(new App())-gt;withEvent(false)-gt;run()-gt;send();
但值得提醒的是,新版本的路由效率、多语言支持、请求缓存效率都是对事件机制的响应。
使用调整
查询类的原始模式被移动到数据库类。
虽然用法没变,但是Db::raw()模式的挪用效率会更高。或者可以直接用新的辅助函数raw替换Db::raw。
原来的表达式类改成了Raw类。
原来的thinkdbExpression类改为thinkdbRaw类,更合适。
多对多关联的pivotDataName模式被重命名为Name模式。
用双简明名称方法替换原来的pivotDataName方法。
过时的用法和参数
使查询类无效的扩展模式
查询类的扩展模式无效。如果需要扩展查询模式,建议先定义查询类并延续系统的thinkdbQuery类,然后在模型中定义查询属性或者设置与数据库相邻的查询参数作为你的自定义类。
无效请求类的挂钩模式
因为不推荐扩展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方式对自动多应用的支持