Laravel 7.10 中的数据库缓存锁定和并发限制
最近, Laravel 团队发布了 v7.10.0 版本,该版本主要修改如下:
- 数据库驱动缓存锁的支持
- session 会话的并发限制以及简化断言测试
除此之外,Laravel v7.10.0 还包含许多新功能,以及 7.x 系列的问题修复。
可通过闭包进行的断言测试
Sjors Ottjes 提供了一种可以通过闭包进行断言测试的方法:
// 在此之前,我们的断言测试需要这样写:
Mail::assertQueued(SubpictureFinishedEmail::class, function (SubpictureFinishedEmail $email) use ($user) {
return $email->user->id === $user->id;
});
// 7.10+ 之后,需要这样
Mail::assertQueued(function (SubpictureFinishedEmail $email) use ($user) {
return $email->user->id === $user->id;
});
// 或者更简洁的方式
Mail::assertQueued(
fn (SubpictureFinishedEmail $email) => $email->user->id === $user->id
);
同一个会话ID的请求并发限制
Taylor Otwell 解决了长期以困扰 Laraevl 开发者的一个问题:关于关会话并发的限制,原文如下:
这个 PR 实现了 Laravel 针对同一个 SESSION ID 的会话的并发限制,以防止因高并发场景下可能出现的数据之间的覆盖与丢失。
详情请看 7.x Same-session ID request concurrency limiting · Pull Request #32636 。
支持子查询的分页
Taylor Otwell 还提供了以下 PR Run pagination count as a subquery for group by and havings:
该 PR 解决了长期以来,在 Laravel 查询中使用
groupBy
和having
带来的一些问题, 这些问题可以追溯到很久之前,该解决方案几年前由 @acasar 提出,但当时并未采用该方案。现在回过头来看,或许这是个更好的实现方式。
关于 cast:make 命令
Adrien Leloup 提供了一个命令行工具 artisan make:cast
,存储于 app/Casts
下,它实现了 CastsAttributes
接口。
数据库统计断言
Christoph Rumpel 提供了一个关于数据库统计的断言:
$this->assertDatabaseCount('users', 50);
// 当断言不匹配将会有以下信息:
// "Failed asserting that table [users] matches expected entries count of 50. Entries found: 1."
SMTP 邮件驱动下的权限验证
由 @fragkp contributed 提供的 auth_mode
:
当我们不想做单独处理的时候,
auth_mode
将很有用。
可选的值: null
, plain
, login
和 cram-md5
.
添加 Model 的 hasNamedScope 支持
Alex Bowers 和 Graham Campbell 就 Model 作用域提供了以下 PRs 。
首先, Alex 贡献的 hasScope 方法 。
hasScope 方法可动态检查作用域是否存在…下面是一个包含了过滤器数组的请求的例子,具体代码如下:
public function index(Request $request)
{
$post = Post::query();
foreach ($request->get('filters', []) as $filter) {
if ($post->hasNamedScope($filter)) {
$post->{$filter}();
}
}
return $post->paginate();
}
在 7.10 最终版本的 Graham’s PR 中,该方法已经更名为 hasNamedScope
:
- 通过过滤器动态判断作用域是否存在,存在则调用。这个 PR 为了一种动态的方式去匹配作用域。
- 在 #32622 添加的 hasScope 方法,为了代码命名风格一致性考量,决定更改为
hasNamedScope
。
缓存驱动的缓存锁支持
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。