Laravel 团队本周发布了 v10.47,其中添加了 whereAll
和 whereAny
方法到 Query Builder,以及在 Collection sortByMany
方法中使用排序标志的能力,等等。
本周很可能是 Laravel 10.x 分支的最后一个发布版本,因为 Laravel 11 将于 2024 年 3 月 12 日星期二发布。Laravel 10 将继续接收错误修复,直到 2024 年 8 月 6 日,以及安全修复,直到 2025 年 2 月 4 日。
whereAll
和 whereAny
Query Builder 方法
新的 @musiermoore 为 Query Builder 贡献了新的 whereAll
和 whereAny
方法,以及 orWhereAll
和 orWhereAny
方法。这些新方法可以使用 or
或 and
逻辑在多个列上进行搜索。
// Before using `orWhere`User::query() ->where(function ($query) use ($search) { $query ->where('first_name', 'LIKE', $search) ->orWhere('last_name', 'LIKE', $search) ->orWhere('email', 'LIKE', $search) ->orWhere('phone', 'LIKE', $search); }); // Using `whereAny`User::whereAny( [ 'first_name', 'last_name', 'email', 'phone' ], 'LIKE', "%$search%");
以下是用 whereAll
的示例,其中所有列都必须使用 AND
匹配。
$search = 'test'; User::whereAll([ 'first_name', 'last_name', 'email',], 'LIKE', "%$search%"); /*SELECT * FROM "users" WHERE ( "first_name" LIKE "%test%" AND "last_name" LIKE "%test%" AND "email" LIKE "%test%")*/
您可以使用 orWhereAll
和 orWhereAny
方法组合多个这样的条件。
sortByMany
集合上支持排序选项标志
在 Tim Withers 贡献了向 Collection sortBy
方法传递多个排序选项的能力。在此更新之前,您可以使用多个可调用对象来实现此目的,但现在可以使用 PHP 的排序标志。
// Pull Request before example$this->campaigns = $campaigns ->with('folder', 'campaignCategory') ->get() ->sortBy([ fn ($a, $b) => str($a->folder?->name)->lower() <=> str($b->folder?->name)->lower(), fn ($a, $b) => str($a->campaignCategory->name)->lower() <=> str($b->campaignCategory->name)->lower(), fn ($a, $b) => str($a->name)->lower() <=> str($b->name)->lower(), ]) // Using sorting flags$this->campaigns = $campaigns ->with('folder', 'campaignCategory') ->get() ->sortBy(['folder.name', 'campaignCategory.name', 'name'], SORT_NATURAL | SORT_FLAG_CASE)
您可以在 PHP 手册的 sort 函数中了解更多关于排序标志的信息。
$failOnTimeout
在队列监听器上设置 Saeed Hosseini 贡献了在队列作业上设置 $failOnTimeout
属性的能力,该属性指示如果超时,作业是否应该失败。
class UpdateSearchIndex implements ShouldQueue{ public $failOnTimeout = false;}
发布说明
您可以在下面看到完整的全新功能和更新列表,以及 GitHub 上 10.46.0 和 10.47.0 之间的差异。以下发布说明直接来自 变更日志
v10.47.0
- [10.x] 允许关系键为枚举类型,由 @AJenbo 在 https://github.com/laravel/framework/pull/50311 中提交
- 修复了传递给 Str::apa() 的 "空" 字符串,由 @tiagof 在 https://github.com/laravel/framework/pull/50335 中提交
- [10.x] 修复了邮件文本组件的标题,使其不再使用 Markdown,由 @dmyers 在 https://github.com/laravel/framework/pull/50332 中提交
- [10.x] 为 "
Str::apa()
中的空字符串" 修复添加了测试,由 @osbre 在 https://github.com/laravel/framework/pull/50340 中提交 - [10.x] 修复了缓存无法使用
0
TTL 过期缓存的问题,由 @kayw-geek 在 https://github.com/laravel/framework/pull/50359 中提交 - [10.x] 为队列监听器添加了超时失败功能,由 @saeedhosseiinii 在 https://github.com/laravel/framework/pull/50352 中提交
- [10.x] 在 sortByMany 集合上支持排序选项标志,由 @TWithers 在 https://github.com/laravel/framework/pull/50269 中提交
- [10.x] 为 Query Builder 添加
whereAll
和whereAny
方法,由 @musiermoore 在 https://github.com/laravel/framework/pull/50344 中提交 - [10.x] 添加了 Reverb 广播驱动,由 @joedixon 在 https://github.com/laravel/framework/pull/50088 中提交