Laravel 7.10 中的数据库缓存锁定和并发限制

Laravel

最近, Laravel 团队发布了 v7.10.0 版本,该版本主要修改如下:

  1. 数据库驱动缓存锁的支持
  2. 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 将很有用。

可选的值: nullplainlogin 和 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 :

  1. 通过过滤器动态判断作用域是否存在,存在则调用。这个 PR 为了一种动态的方式去匹配作用域。
  2. #32622 添加的 hasScope 方法,为了代码命名风格一致性考量,决定更改为 hasNamedScope

缓存驱动的缓存锁支持

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-7-10-0

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

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

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