Laravel 9.7 发布

Laravel

Laravel 团队发布了 Laravel v9.7.0 中的 whereIn() 路由参数约束方法,Str::squish() 助手,JSON 路径查询增强等:

查询构造器 whereBelongsTo() 接受集合

Erik Gaal 贡献了将集合传递给查询构造器中 whereBelongsTo() 方法的能力:

// Previously
$query
    ->whereBelongsTo($category[0])
    ->orWhereBelongsTo($category[1])
    // ...

// Or...
$query->whereIn('category_id', $categories->modelKeys());


// >=9.7 can use collections:
$query->whereBelongsTo($categories);
$query->whereBelongsTo($categories, 'category');

包含 Json Paths 的数据库查询支持数组索引

Derek MacDonald 贡献了在包含 JSON paths 的数据查询中支持数组索引:

DB::table('json_table')
    ->where('column->json_option[0]', 'foo')
    ->update(['column->json_option[0]', => 'bar']);

参见 Pull Request #41767 了解更多详细信息和相关 PRs/issues。

路由事件在路由匹配之前触发

Tim Roberson 贡献了一个在路由器尝试匹配路由之前触发的事件。这个事件允许开发者在路由开始前立即访问请求:

use Illuminate\Routing\Events\Routing;

Event::listen(function (Routing $event) {
    // ...
});

路由 whereIn() 参数约束方法

@Propaganistas 贡献了一个 whereIn() 路由参数约束方法,该方法可用于将路由参数与允许的值数组相匹配:

Route::get('/foo/{bar}')->whereIn('bar', $values);

Beanstalkd 和 SQS 队列的批处理作业延迟

OMAR.A 贡献了使用批处理作业延迟的能力。在这些 PR 贡献之前, SQS 和 Beanstalkd 在向队列发送消息时忽略了延迟时间,现在,他们考虑到了预期的延迟。

use  App\Jobs\ImportCsv;
use  Illuminate\Bus\Batch;
use  Illuminate\Support\Facades\Bus;

$batch =  Bus::batch([
    (new  ImportCsv(1, 100))->delay($delay),
    (new  ImportCsv(101, 200))->delay($delay)
])->dispatch();

字符串压缩助手

Dwight Watson 贡献了一个 squish() 字符串助手,以删除给定字符串中所有 “额外” 空格。以下是拉取请求测试中的一些示例,可以直观的了解 squish 的功能:

$this->assertSame(
    'laravel php framework',
    Str::squish(' laravel php framework '));

$this->assertSame(
    'laravel php framework',
    Str::squish("laravel\t\tphp\n\nframework")
);

$this->assertSame(
    'laravel php framework',
    Str::squish('
        laravel
        php
        framework
    ')
);

查询构造器 「whereJsonContainsKey()」 方法

Derek MacDonald 贡献了一个 whereJsonContainsKey() 方法。它支持检查数组整型键并支持 SQLite。以下是拉取请求描述中的一些示例:

DB::table('users')
    ->whereJsonContainsKey('options->languages')
    ->get();

DB::table('users')
    ->whereJsonDoesntContainKey('options->language->primary')
    ->get();

DB::table('users')
    ->whereJsonContainsKey('options->2fa[0]')
    ->get();

DB::table('users')
    ->whereJsonDoesntContainKey('options->2fa[0][1]')
    ->get();

响应后分派批处理

OMAR.A 贡献了在响应发送给用户后分派批处理的能力:

$batch = Bus::batch([
    new ImportCsv(1, 100),
    new ImportCsv(101, 200),
    new ImportCsv(201, 300),
    new ImportCsv(301, 400),
    new ImportCsv(401, 500),
])->then(function (Batch $batch) {
    // 当所有任务完成后
})->catch(function (Batch $batch, Throwable $e) {
    // 检测到第一批任务失败时
})->finally(function (Batch $batch) {
    // 批处理已完成后执行
})->dispatchAfterResponse();

// 此外,它返回一个批处理对象,因此您可以访问批处理 id
返回 $batch->id;

发行说明

你可以在下面看到新功能和更新的完整列表,以及在 GitHub上看 9.6.0 and 9.7.0 的差异。以下发行说明直接来自 changelog:

v9.7.0

已新增

  • 让 whereBelongsTo 接受集合 (#41733)
  • 包含 JSON 路径的数据库查询支持数组索引 (#41767)
  • 路由匹配前触发事件 (#41765)
  • 添加 Illuminate/Http/Resources/ConditionallyLoadsAttributes::whenNotNull 方法 (#41769)
  • 添加 「whereIn」路由参数约束方法 (#41794)
  • 添加 Illuminate/Queue/BeanstalkdQueue::bulk() (#41789)
  • 添加 Illuminate/Queue/SqsQueue::bulk() (#41788)
  • 添加 String::squish() 助手 (#41791)
  • 添加查询构造器 whereJsonContainsKey() 方法 (#41802)
  • 能够响应后分派批处理 (#41787)

已修复

  • 工厂生成修复 (#41688)
  • 修复了重试方法的 Http 客户端抛出布尔参数 (#41762, #41792)
  • 忽略 PhpRedisConnector (#41773) 中的空redis用户名字符串
  • 修复了 AsArrayObject/AsCollection (#41797, 05846e7) 的可空类型固定支持
  • 修复了将作业从可迭代添加到挂起的批处理 (#41786)
  • http 客户端:修复连接异常 (#41811)

已更改

  • 为数据库队列启用批处理作业延迟 (#41758)
  • 为 redis 队列启用批处理作业延迟 (#41783)
  • Http 客户端:为每次重试尝试发送“response received”事件 (#41793)
  • Http 客户端:提供挂起的请求以重试回调 (#41779)
  • 允许 postgresql 使用无长度限制的字符串和字符 (#41800)
  • 恢复一些 Carbon::setTestNow() 的清除 (#41810)
  • 允许在使用并行测试时清理数据库 (#41806)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

版本更新太快了,慢慢就跟上了 Chrome

2年前 评论

:joy:laravel8版本中……功能都用不到

2年前 评论

我都还在用5.8 :sweat_smile:

2年前 评论

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