Laravel 8.13 发布
Laravel团队本周发布了8.13,并更新了变更日志,其中详细说明了上周的 8.12 版本中的所有新功能。 过去几周,Laravel 新增了许多功能,其中包括许多令人兴奋的框架更新,让我们看看有什么新功能!
8.12: 创建 Observers 支持自定义路径
@StefanoDucciConvenia 加强了 make:observer
命令 (#34911).
8.12: 8.x Eloquent Factory 的 Lazy 方法
Mathieu TUDISCO 提供了创建回调的功能,该回调在被调用时将模型保留在数据库中。 在以前的Laravel 版本中,FactoryBuilder 有一个lazy()
方法,该方法仅在被调用时才创建一条记录。 现在,8.x 工厂可以执行以下操作:
$factory = User::factory()->lazy();
$factory = User::factory()->lazy(['name' => 'Example User']);
$factory();
8.12: Eloquent 属性类型转换之 -- 字符串加密
Jason McCreary 为 Eloquent 提供了一个属性类型转换方式,它可以用来处理一些简单字符串的加密和解密:
public $casts = [
'access_token' => 'encrypted',
];
8.12: 新增 DatabaseRefreshed 事件
Adam Campbell 贡献了一个新的 DatabaseRefreshed
事件,当执行 migrate:fresh
和 migrate:refresh
命令后立即触发。新事件允许开发人员在刷新数据库后执行辅助操作。您可以使用以下命名空间中的事件类:
\Illuminate\Database\Events\DatabaseRefreshed::class
8.12: 新增 withColumn() 用来支持更多聚合统计函数
Khalil Laleh 贡献了一个 withColumn
方法用来支持更多的 SQL 聚合函数,像 min
, max
, sum
, avg
, 以及更多关联方式:
Post::withCount('comments');
Post::withMax('comments', 'created_at');
Post::withMin('comments', 'created_at');
Post::withSum('comments', 'foo');
Post::withAvg('comments', 'foo');
如果你愿意,你可以查看 Pull Request #34965 了解更多
8.12: 给 Eloquent/Query 构造器添加了 explain() 方法
Illia Sakovich 向 builder/eloquent 提供了 explain()
方法, 它允许你接收查询的分析报告:
Webhook::where('event', 'users.registered')->explain()
Webhook::where('event', 'users.registered')->explain()->dd()
现在你可以调用 explain()
来返回分析结果,或者可以使用 dd()
来终止代码并打印分析结果
8.12: PHP 8 的完全支持
Dries Vints 一直致力于为 Laravel 生态系统添加php8支持,这涉及到各种库(第一方和第三方库)以及许多工作的协调。非常感谢 Dries 和所有参与让 Laravel 为下一个主要 PHP 版本做好准备的人!
8.12: 新增了几个路由注册方法
Gregori Piñeres 提供了一些路由正则表达式注册方法,
自此以后,我们在路由参数中添加一些常用的正则表达式,有了一种更便捷的方式:
// 以前。这仍然是一种有效的、可接受的路由定义方法
Route::get('authors/{author}/{book}')
->where([
'author' => '[0-9]+',
'book' => '[a-zA-Z]+'
]);
// 现在可以选用的语法
Route::get('authors/{author}/{book}')
->whereNumber('author')
->whereAlpha('book');
// 新的方法支持多个参数
Route::get('authors/{author}/{book}')
->whereAlpha('author', 'book');
8.12: 为队列任务的速率限制添加不再释放选项
Paras Malhotra 为 RateLimited
and RateLimitedWithRedis
任务中间件贡献了 dontRelease()
方法:
public function middleware()
{
return [(new RateLimited('backups'))->dontRelease()];
}
调用dontRelease()
方法时,不会在任务速率受限时将任务释放回队列。
8.13: 延迟预加载的聚合方法
在 8.12 版本中 Khalil Laleh 提供了 withColumn()
方法用来支持更多的聚合查询方法。在 8.13 版本中,他又贡献了一系列的 load* 聚合方法:
public function loadAggregate($relations, $column, $function = null)
public function loadCount($relations)
public function loadMax($relations, $column)
public function loadMin($relations, $column)
public function loadSum($relations, $column)
public function loadAvg($relations, $column)
8.13: 新增 chunk() 用来让句子更易读
Chris Kankiewicz 贡献了一个 chunk()
方法来让句子更易读,它允许字符串按特定长度进行分块:
// 返回一个集合
Str::of('foobarbaz')->chunk(3);
// 返回 'foo-bar-baz'
Str::of('FooBarBaz')->lower()->chunk(3)->implode('-');
版本发行说明
您可以在下面看到完整的新特性和更新列表,以及在 GitHub 上 从8.11.0到8.12.0 和 从8.12.0到8.13.0 之间的差异。以下发行说明直接来自 变更日志:
v8.13.0
新增特性
- 在
Illuminate\Database\Eloquent\Collection
中新增loadMax()
|loadMin()
|loadSum()
|loadAvg()
方法。在Illuminate\Database\Eloquent\Model
中新增loadMax()
|loadMin()
|loadSum()
|loadAvg()
|loadMorphMax()
|loadMorphMin()
|loadMorphSum()
|loadMorphAvg()
方法 (#35029) - 修改
Illuminate\Database\Eloquent\Concerns\QueriesRelationships::has()
方法用以支持多态关联 (#35050) - 新增
Illuminate\Support\Stringable::chunk()
(#35038)
Fixed
- 修复了一些问题在
Illuminate\Database\Eloquent\Concerns\QueriesRelationships::withAggregate()
(#35061, #35063)
已更改
- 设置链
queue
|connection
|delay
仅在 (#35047)中显示配置时
重构中
- 在某些地方删除多余的无法到达的返回语句 (#35053)
v8.12.0
添加
- 添加了通过
make:observer
命令创建具有自定义路径的观察者的功能 (#34911) - 添加了
Illuminate\Database\Eloquent\Factories\Factory::lazy()
(#34923) - 通过
make:cast
命令添加了使用自定义存根文件进行演员表转换的功能 (#34930) - 添加: 自定义强制转换可以实现递增/递减逻辑 (#34964)
- 添加了加密的 Eloquent 转换 (#34937, #34948)
- 添加
DatabaseRefreshed
事件以在刷新数据库之后触发 (#34952, f31bfe2) - 在
Illuminate/Database/Eloquent/Concerns/QueriesRelationships
添加了withMax()
|withMin()
|withSum()
|withAvg()
(#34965, f4e4d95, #35004) - 在
Query\Builder
和Eloquent\Builder
添加了explain()
(#34969) - 使
multiple_of
验证规则能够处理非整数值 (#34971) - 添加
setKeysForSelectQuery
方法并且在刷新模型中的数据时触发它使用 (#34974) - 完整的PHP 8.0支持 (#33388)
- 添加了
Illuminate\Support\Reflector::isCallable()
(#34994, 8c16891, 31917ab, 11cfa4d, #34999) - 添加了路由正则表达式注册方法 (#34997, 3d405cc, c2df0d5)
- 在 RateLimited 和 RateLimitedWithRedis 任务中间件里添加了 dontRelease 选项 (#35010)
已修复
- 修复了在
Illuminate\Database\Schema\PostgresSchemaState::load()
(268237f)中的文件路径检查 - 修复了:
PhpRedis (v5.3.2)
集群 – 设置默认链接内容为null
(#34935) - 修复了 Eloquent 模型
loadMorph
和loadMorphCount
的方法 (#34972) - 修复了选择负荷对多对多问题列的歧义 (5007986)
- 修复了 Postgres 转储 (#35018)
已修改
- 修改了
make:factory
命令 (#34947, 4f38176) - 使 assertSee, assertSeeText, assertDontSee and assertDontSeeText 接受数组 (#34982, 2b98bcc)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
更新够及时!正在使用php8
也许是这点小事,促成了某些更新 pull request
这次更新得不少。