查询构造器 whereAll() 和 whereAny() 方法添加到 Laravel 10.47
Laravel 团队发布了 v10.47,它向查询构造器添加了 whereAll
和 whereAny
方法,以及在 Collection sortByMany
方法使用排序 flag 的能力,等等。
此次发布可能是 Laravel 11 于2024年3月12日(星期二)发布之前 10.x 分支的最后一次发布。Laravel 10 将继续接受漏洞修复,直到 2024 年 8 月 6 日,安全修复将持续到 2025 年 2 月 4 日。
新增 whereAll 和 whereAny 查询构造器方法
@musiermoore 贡献了新的 whereAll 和 whereAny 方法,以及 orWhereAll 和 orWhereAny 方法。这些新方法可以使用 or
或者 and
逻辑搜索多个字段
// 以前使用 `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);
});
// 使用 `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
方法,联合多个 like.
在 sortByMany 集合上支持排序选项 Flag
Tim Withers 贡献了传递多个排序选项传递给集合的 sortBy
方法的能力。在此更新之前,你可以使用多个 callable 来实现此功能,而现在可以使用排序 Flag:
// 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 函数 中了解更多排序 Flag 内容。
在队列监听器上设置 $failOnTimeout
Saeed Hosseini 贡献了在队列任务上设置 $failOnTimeout 属性的能力,该属性用来说明如果超时任务是否失败:
class UpdateSearchIndex implements ShouldQueue
{
public $failOnTimeout = false;
}
更新日志
你可以在下面看到新功能和更新的完整列表,以及 GitHub上 10.46.0 和 10.47.0 之间的差异。以下直接来自更新日志:
#v10.47.0
- [10.x] Allow for relation key to be an enum by @AJenbo in https://github.com/laravel/framework/pull/50311
- Fix for "empty" strings passed to Str::apa() by @tiagof in https://github.com/laravel/framework/pull/50335
- [10.x] Fixed header mail text component to not use markdown by @dmyers in https://github.com/laravel/framework/pull/50332
- [10.x] Add test for the "empty strings in Str::apa()" fix by @osbre in https://github.com/laravel/framework/pull/50340
- [10.x] Fix the cache cannot expire cache with 0 TTL by @kayw-geek in https://github.com/laravel/framework/pull/50359
- [10.x] Add fail on timeout to queue listener by @saeedhosseiinii in https://github.com/laravel/framework/pull/50352
- [10.x] Support sort option flags on sortByMany Collections by @TWithers in https://github.com/laravel/framework/pull/50269
- [10.x] Add whereAll and whereAny methods to the query builder by @musiermoore in https://github.com/laravel/framework/pull/50344
- [10.x] Adds Reverb broadcasting driver by @joedixon in https://github.com/laravel/framework/pull/50088