Laravel 8.16 发布
上周 Laravel 团队发布了 8.16 版本,包含可以直接到数据库命令行界面的 artisan 命令, 便捷的进度条方法, 和一个新的 Ably 的实现.
该版本包含的许多喜人的新功能, 让我们看下 8.x 分支中的最新更改:
进度条便捷方法
Taylor Otwell 提供了可以在控制台命令中使用的 withProgressBar()
便捷方法 。您可以按照以下步骤从文档创建进度条:
$users = App\Models\User::all();
$bar = $this->output->createProgressBar(count($users));
$bar->start();
foreach ($users as $user) {
$this->performTask($user);
$bar->advance();
}
$bar->finish();
使用便捷方法后,代码看起来像这样:
$users = App\Models\User::all();
$this->withProgressBar($users, function ($user, $bar) {
$this->performTask($user);
});
Call Silently
Taylor Otwell贡献了callSilently()
方法,该方法是CallsCommands
特性中callSilent
的别名。您可能会发现这更清楚:
$this->callSilently('config:cache');
在处理之前释放唯一队列任务锁
Paras Malhotra 贡献了在作业处理之前释放唯一队列任务的功能.对于在队列任务完成和解锁之间可能存在竞争条件的情况,新界面很有用。要了解更多信息,我建议您检查框架的 Pull Request #35255 和 documentation pull request.
Ably Broadcaster
泰勒·奥特威尔(Taylor Otwell)为广播实时,实时更新的用户界面贡献了AblyBroadcaster
。开发人员现在可以从Pusher,Redis和Ably中进行选择,以满足实时通信需求。如需复习,请查看Broadcasting文档,以了解如何开始在Laravel项目中进行广播。
支持每个通道的延迟通知
Gergő D. Nagy )贡献了基于每个通道而不是一个整体延迟来延迟通知传递的功能。如果需要针对电子邮件,数据库,SMS等通知不同地延迟同一通知,则定义每个通道的延迟很有用。您现在可以选择使用要延迟的频道关联数组来调用 delay()
:
$user->notify((new InvoicePaid($invoice))->delay([
'mail' => now()->addMinutes(5),
'sms' => now()->addMinutes(10),
]));
请注意,使用数组格式时,未在数组中定义的通道不会有延迟。
允许按多个条件对数组进行排序
johnylemon 为Arr
支持类贡献了一个sortByMany
方法,默认情况下该道具将按升序对道具进行排序:
$sorted = Arr::sortByMany($unsorted, [
'name', 'age'
];
$sorted = Arr::sortByMany($unsorted, [
['name', false], // will be ordered by `name` descending
['age', true] // then by age ascending, if there are items with same `name` value
];
最后, 这个 PR 的要点是这个方法可以使用闭包进行复杂的排序:
$sorted = Arr::sortByMany($unsorted, [
// order by childrens count asc
function($a, $b) {
return $a->childrens()->count() <=> $b->childrens()->count();
},
// then by grandchildrens by descending order if needed
function($a, $b) {
return $b->grandchildrens()->count() <=> $a->grandchildrens()->count();
}
];
加入数据库的 CLI
Paras Malhotra—贡献了许多出色的队列功能—目前又提供了一个新的 artisan 命令,加入数据库的 CLI :
php artisan db mysql
上面的命令是使用数据库凭据连接到MySQL CLI提示符,无需手动的记忆命令或者设置别名命令。 这个命令目前支持 mysql
, pgsql
, sqlite
,和 sqlsrv
数据库。
集合的 splitIn 方法
Andrew Brown 提供了 splitIn
方法, 和 split 类似。 不同之处在于,split
使得每个区块与另一区块在数量上的差异不会超过一个。 相反,splitIn
将填充所有之前的块,然后将剩余部分分配给最后一个块。这个 pull request 提供了有关为什么要使用splitIn
的更多详细信息。
发行说明
你可以在 GitHub 上看到下面的完整的新增功能和更新列表,以及8.15.0 和8.16.0 的区别。以下发行说明直接来自changelog:
v8.16.0
新增
- 添加了
Illuminate\Console\Concerns\InteractsWithIO::withProgressBar()
(4e52a60, 169fd2b) - 添加了
Illuminate\Console\Concerns\CallsCommands::callSilently()
别名callSilent()
(7f3101b, 0294433) - 添加了在处理之前释放唯一作业锁的选项 (#35255, b53f13e)
- 广播系统中新增 Ably 广播 (e0f3f8e, 6381aa9)
- 新增了将表名定义为默认变形类型的功能 (#35257)
- 允许为数据库队列驱动程序覆盖 MySQL 服务器版本 (#35263)
- 添加了
Illuminate\Foundation\Testing\Wormhole::back()
(#35261) - 支持为每个频道添加延迟通知 (#35273)
- 允许对多个条件进行排序 (#35277, 53eb307)
- 添加了
Illuminate/Database/Console/DbCommand.php
命令 (#35304, b559b3e) - 添加了集合方法
splitIn
(#35295)
修复
- 修复了具有配置自定义主题的通知的呈现(325a335)
- 正在修复在PusherBroadcaster@broadcast的 BroadcastException消息(#35290)
- 修复了DetectsLostConnection字符串(#35323)
- 修复了SQL Server命令生成(#35317)
- 修复了在缓存的封闭路线上的路线模型绑定(eb3e262)
修改
- 在广播路由上禁用CSRF(acb4b77)
- 轻松设置空缓存驱动程序(#35262)
- 建议将
aws/aws-sdk-php
更新到^3.155
(#35267) - 确保释放一次ShouldBeUniqueUntilProcessing的任务锁 (#35270)
- 将BelongsToMany和MorphToMany中的qualifyColumn重命名为qualifiedPivotColumn(#35276)
- 检查在
Illuminate\Database\Eloquent\Relations\BelongsToMany
中是否使用了AsPivot trait而不是Pivot Model(#35271) - 避免在Model::destroy()中使用空ID进行无操作数据库查询(#35294)
- 在pg_restore中使用–no-owner和–no-acl(#35309)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。