每月免费发送 4,000 封电子邮件 | Mailtrap 现在发送真正的电子邮件!

Laravel 12.50.0 中的 `hasMany()` 集合方法

发布日期 经过

Laravel 12.50.0 中的 `hasMany()` 集合方法(图片)

发布日期: 2026年2月4日
Laravel 版本: 12.50.0

概括

Laravel v12.50.0 引入了一项新功能 hasMany() 新增了用于检查集合是否包含多个匹配项的集合方法,同时支持唯一排队监听器、类型化缓存获取器,以及用于排除附加属性的新模型方法。此版本延续了 Laravel 对开发者体验改进的重视,扩展了枚举支持并修复了大量错误。

主要亮点包括:

  • 新的 hasMany() 收集方式
  • 支持唯一排队监听器
  • withoutAppends() 模型方法
  • Cache 外观的类型化 getter
  • authority() URI解析方法
  • 支持缓存数组键的枚举
  • 修复了大量错误并改进了字体。

什么是新的

hasMany() 领取方式

Laravel 12.50.0 添加了 hasMany() 该方法用于检查集合,提供了一种直接的方式来检查集合中是否包含多个符合指定条件的项。此方法与以下方法互为逆操作: hasSole() (v12.49.0 版本引入)——其中 hasSole() 确认只有一个匹配项, hasMany() 确认多场比赛。

// 检查集合是否包含多个元素
$集合 -> hasMany ();
// 使用回调过滤器
$用户 -> hasMany fn ($user) => $user -> isActive ());
// 使用键/值对
$订单 -> hasMany '地位' , '待办的' (英文):
// 使用运算符语法
$产品 -> hasMany '价格' , '>=' , 100 (英文):

这种方法特别适用于验证逻辑、条件工作流和筛选场景,在这些场景中,您需要在执行操作之前确认是否存在多个项目。

拉取请求: #58550

唯一排队监听器

已排队的事件监听器现在可以实现 ShouldBeUniqueShouldBeUniqueUntilProcessing 合约可以防止重复的监听器在短时间内连续被派往队列:

命名空间 应用程序监听器 ;
使用 应用程序\事件\许可证已保存 ;
使用 照亮\合约\队列\应该唯一 ;
使用 照亮\合约\队列\应该队列 ;
班级 获取产品密钥 实现 应该排队 , 应该独一无二
{
民众 功能 唯一标识符 许可证已保存 $event) : 细绳
{
返回 $事件 -> 执照 -> ID;
}
民众 功能 __invoke 许可证已保存 $event) : 空白
{
// 处理事件...
}
}

此功能反映了独特的作业模式,并解决了生产环境中常见的监听器多次被派发到队列中的问题,而每个唯一标识符的监听器本应只运行一次。与此不同的是 WithoutOverlapping 仅阻止并发执行的中间件 ShouldBeUnique 防止重复作业一开始就进入队列。

拉取请求: #58402

withoutAppends() 模型方法

新的 withoutAppends() 该方法允许您有选择地从模型实例中删除附加属性,从而提高 API 响应和数据序列化的性能:

// 删除所有附加属性
$用户 -> 不附加 ();
// 删除特定附加属性
$用户 -> 不附加 ([ '全名' , 'avatar_url' ]);

当您的模型包含计算成本高昂的附加属性,而这些属性并非每个用例都需要时,此功能尤其有用。现在,您无需定义多个单独的模型类或资源转换,即可根据每个请求有条件地排除附加属性。

拉取请求: #58552

类型化缓存获取器

缓存外观现在包含类型化的 getter 方法,在检索缓存值时提供类型安全性和更好的 IDE 支持:

// 获取默认值的整数
$count = 缓存 :: 整数 'view_count' , 0 (英文):
// 获取默认字符串
$名称 = 缓存 :: 细绳 'user_name' , '客人' (英文):
// 获取布尔值及其默认值
$isActive = 缓存 :: 布尔值 'feature_enabled' , 错误的 (英文):
// 获取默认值的浮点数
$价格 = 缓存 :: 漂浮 '产品价格' , 0.0 (英文):
// 获取默认数组
$items = 缓存 :: 大批 'cart_items' ,[]);

这些方法确保类型一致性,并更清楚地表明缓存中期望的值的类型,从而减少运行时类型错误并提高代码可读性。

拉取请求: #58451

authority() URI 方法

Support\Uri 课程现在包括 authority() 从 URI 中提取授权组件的方法:

$类型 = 类型 :: 'https://user:pass@example.com:8080/path' (英文):
权威 = $类型 -> 权威 (); // "user:pass@example.com:8080"

URI 的授权组件包含用户信息、主机和端口,在解析或验证 URL 时非常有用。

拉取请求: #58534

缓存数组键的枚举支持

Laravel 继续扩展枚举支持, Cache::get() 现在使用数组键时也接受枚举值:

$值 = 缓存 :: 得到 ([ 缓存键 :: 用户 , 缓存键 :: 设置 ]);

这是在会话和缓存方法中先前枚举支持添加的基础上实现的,为整个应用程序提供类型安全的缓存键管理。

拉取请求: #58616

参考

保罗·雷德蒙德照片

Laravel News 特约撰稿人。全栈 Web 开发人员兼作家。

归档于:
立方体

Laravel 时事通讯

加入超过 4 万名开发者的行列,不错过任何新的技巧、教程等内容。

图像
Jump24 - 英国 Laravel 代理机构

Laravel 开发人员,精通技术,绝不外包,绝不离岸外包,始终卓越。

访问 Jump24 - 英国 Laravel 代理机构
银行标志

银行

只需每月 3200 美元,即可聘请一位拥有 4-6 年经验的资深 Laravel 开发人员,为您的项目注入强劲动力。您将获得 160 小时的专属专业服务,并享受 15 天无风险试用。立即预约通话!

银行
Tinkerwell 徽标

廷克威尔

Laravel 开发者必备的代码运行器。可在本地和生产环境中体验 AI、自动补全和即时反馈功能。

廷克威尔
几天内即可获得 Laravel 代码审查徽标的专家指导

几天内即可获得 Laravel 代码审查方面的专家指导

专家级代码审查!两位拥有 10 年以上 Laravel 开发经验的开发者将为您提供清晰、实用的反馈,帮助团队构建更优质的应用程序。

几天内即可获得 Laravel 代码审查方面的专家指导
PhpStorm 标志

PhpStorm

首选的 PHP IDE,对 Laravel 及其生态系统提供广泛的开箱即用支持。

PhpStorm
Laravel Cloud 标志

Laravel 云

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

Laravel 云
Kirschbaum 标志

樱桃树

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

樱桃树
Shift 标志

转移

还在运行旧版本的 Laravel?立即实现 Laravel 自动升级和代码现代化,让您的应用程序保持最新状态。

转移
鱼叉:新一代时间跟踪和发票标志

Harpoon:新一代时间跟踪和发票系统

新一代时间跟踪和计费软件,帮助您的机构规划和预测盈利的未来。

Harpoon:新一代时间跟踪和发票系统
Lucky Media 标志

幸运传媒

Get Lucky Now——拥有十余年经验的 Laravel 开发理想之选!

幸运传媒
SaaSykit:Laravel SaaS 入门套件徽标

SaaSykit:Laravel SaaS 入门套件

SaaSykit 是一个多租户 Laravel SaaS 入门套件,包含运行现代 SaaS 所需的所有功能,例如支付、美观的结账界面、管理面板、用户仪表盘、身份验证、现成组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 入门套件
Filament v5.2.0 新增标注组件图像

Filament v5.2.0 新增标注组件

阅读文章
OpenAI 发布 GPT-5.3-Codex,一种用于代理式开发图像的新型 Codex 模型

OpenAI 发布 GPT-5.3-Codex,一种用于代理式开发的新型 Codex 模型

阅读文章
Claude Opus 4.6 新增了自适应思维、128K 输出、压缩 API 以及更多图像处理功能。

Claude Opus 4.6 新增了自适应思维、128K 输出、压缩 API 等功能。

阅读文章
Laravel 发布官方 AI SDK,用于构建 AI 应用

Laravel 发布官方 AI SDK,用于构建 AI 应用

阅读文章
Laravel 12.50.0 中的 `hasMany()` 集合方法(图片)

Laravel 12.50.0 中的 `hasMany()` 集合方法

阅读文章
在 Laravel 图片检索中屏蔽敏感的 Eloquent 属性

在 Laravel 中检索时屏蔽 Eloquent 的敏感属性

阅读文章