Query Builder 新增 whereAll() 和 whereAny() 方法

发布于 作者:

Laravel 团队本周发布了 v10.47,其中添加了 whereAllwhereAny 方法到 Query Builder,以及在 Collection sortByMany 方法中使用排序标志的能力,等等。

本周很可能是 Laravel 10.x 分支的最后一个发布版本,因为 Laravel 11 将于 2024 年 3 月 12 日星期二发布。Laravel 10 将继续接收错误修复,直到 2024 年 8 月 6 日,以及安全修复,直到 2025 年 2 月 4 日。

新的 whereAllwhereAny Query Builder 方法

@musiermoore 为 Query Builder 贡献了新的 whereAllwhereAny 方法,以及 orWhereAllorWhereAny 方法。这些新方法可以使用 orand 逻辑在多个列上进行搜索。

// 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%"
)
*/

您可以使用 orWhereAllorWhereAny 方法组合多个这样的条件。

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

Paul Redmond photo

Laravel 新闻的专栏作家。全栈 Web 开发人员和作家。

Cube

Laravel 新闻简报

加入 40,000 多名其他开发者,绝不错过新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

No Compromises

来自 No Compromises 播客的两位经验丰富的开发者 Joel 和 Aaron 现在可供您为您的 Laravel 项目雇用。 ⬧ 固定费率为每月 7500 美元。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 满意退款保证。

No Compromises
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动的 Laravel 升级和代码现代化,以保持您的应用程序新鲜。

Shift
Bacancy logo

Bacancy

让您的项目充满活力,只需每月 2500 美元,即可获得拥有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专业服务和 15 天的无风险试用期。立即预约电话!

Bacancy
Lucky Media logo

Lucky Media

立即获得好运 - 拥有超过十年的经验,是 Laravel 开发的理想选择!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的强大功能带到 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 招聘网站

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动套件

SaaSykit 是一个 Laravel SaaS 启动套件,包含运行现代 SaaS 所需的所有功能。付款、漂亮的结账、管理面板、用户仪表板、身份验证、就绪组件、统计信息、博客、文档等等。

SaaSykit: Laravel SaaS 启动套件
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新的合作伙伴,帮助企业取得成功

Rector
MongoDB logo

MongoDB

使用 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务性、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章