Laravel 8.13 发布

Laravel

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:freshmigrate:refresh 命令后立即触发。新事件允许开发人员在刷新数据库后执行辅助操作。您可以使用以下命名空间中的事件类:

\Illuminate\Database\Events\DatabaseRefreshed::class

8.12: 新增 withColumn() 用来支持更多聚合统计函数

Khalil Laleh 贡献了一个 withColumn 方法用来支持更多的 SQL 聚合函数,像 minmaxsumavg, 以及更多关联方式:

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 事件以在刷新数据库之后触发 (#34952f31bfe2)
  • Illuminate/Database/Eloquent/Concerns/QueriesRelationships添加了withMax()|withMin()|withSum()|withAvg()  (#34965f4e4d95#35004)
  • 在 Query\Builder 和 Eloquent\Builder 添加了 explain()(#34969)
  • 使 multiple_of 验证规则能够处理非整数值 (#34971)
  • 添加 setKeysForSelectQuery 方法并且在刷新模型中的数据时触发它使用 (#34974)
  • 完整的PHP 8.0支持 (#33388)
  • 添加了Illuminate\Support\Reflector::isCallable() (#349948c1689131917ab11cfa4d#34999)
  • 添加了路由正则表达式注册方法 (#349973d405ccc2df0d5)
  • 在 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 命令 (#349474f38176)
  • 使 assertSee, assertSeeText, assertDontSee and assertDontSeeText 接受数组 (#349822b98bcc)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-8-13-0

译文地址:https://learnku.com/laravel/t/51632

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

更新够及时!正在使用php8

5个月前 评论

也许是这点小事,促成了某些更新 pull request

4个月前 评论
fatrbaby

这次更新得不少。

4个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!