Laravel 13.2.0 为 Eloquent 模型添加了一组新的对称、富有表现力的 PHP 属性,并支持枚举。
#[Queue]
和
#[Connection]
属性等等。
主要亮点包括:
- 新的对称 Eloquent 模型属性(
#[DateFormat],#[WithoutTimestamps]等等) - 枚举支持
#[Queue]和#[Connection]队列属性 releaseOnSignal参数withoutOverlapping()处理意外的进程终止UniqueConstraintViolationException现在包含列和索引信息schedule:list以正确的时区显示 cron 表达式
什么是新的
对称雄辩模型属性
PR #59284 添加了一组专注的、单一用途的属性,作为多参数属性的替代方案,例如
#[Table]
现在,每个关注点都拥有自己专属的属性,而不是将多个关注点打包到一个属性中:
// 前#[
桌子
(
时间戳
:
错误的
,
日期格式
:
'在'
)]班级
邮政
延伸
模型
{}// 后#[
日期格式
(
'在'
)]#[
无时间戳
]班级
邮政
延伸
模型
{}
新属性反映了 Eloquent 模型中已存在的属性,从而更容易在类级别以声明方式配置模型行为。
拉取请求: #59284
枚举支持
#[Queue]
和
#[Connection]
这
#[Queue]
和
#[Connection]
PHP 属性现在可以直接接受枚举类型的值,因此您可以传递枚举值而无需调用 `get()` 方法。
->value
:
// 前#[
队列
(
尾巴
::
日志摄取
->
价值)]最终的
班级
摄取审计日志
实现
应该排队
{}// 后#[
队列
(
尾巴
::
日志摄取
)]最终的
班级
摄取审计日志
实现
应该排队
{}
这使得该属性的行为与直接通过该属性所支持的行为保持一致。
拉取请求: #59278
releaseOnSignal
为了
withoutOverlapping()
withoutOverlapping()
现在接受一个
releaseOnSignal
参数。当
true
如果进程收到终止信号(SIGTERM、SIGINT 或 SIGQUIT),则重叠锁(存储为缓存键)将被释放,以便在调度程序重新启动时,任务可以立即再次运行。
如果没有这个功能,如果在任务运行时调度程序进程被终止(这种情况可能会在托管基础设施上发生),则锁将保持设置状态,并且任务将不会再次运行,直到重叠 TTL 到期。
工匠
::
命令
(
'reports:generate'
,
功能
(){
// ...})
->
不重叠
(
信号释放
:
真的
(英文):
需要
pcntl
扩大。
拉取请求: #59298
UniqueConstraintViolationException
包含列和索引详情
UniqueConstraintViolationException
现在会显示违反唯一约束的列和索引名称。可用数据因数据库驱动程序而异:
| 司机 | columns |
index |
|---|---|---|
| SQLite | ✅ | ❌ |
| PostgreSQL | ✅ | ✅ |
| MySQL | ❌ | ✅ |
| SQL 服务器 | ❌ | ✅ |
尝试
{
用户
::
创造
([
'电子邮件'
=>
'taken@example.com'
]);}
抓住
(
UniqueConstraintViolationException
$e) {$e
->
列;
例如,PostgreSQL/SQLite 中的 ['email']$e
->
指数;
例如,PostgreSQL/MySQL/SQL Server 中的“users_email_unique”}
拉取请求: #59299
schedule:list
以正确的时区显示表达式
这
schedule:list
现在,该命令会根据每个任务配置的时区调整 cron 表达式,而不是始终以应用程序的默认时区显示。这样,输出结果就与任务实际运行的时间保持一致。
拉取请求: #59286
Backoff
属性现在是可变参数的
这
#[Backoff]
该属性现在接受一个可变参数的延迟值列表,与通过以下方式提供的基于数组的方法相匹配:
backoff
已排队作业的属性:
#[
退缩
(
10
,
30
,
60
)]班级
流程订单
实现
应该排队
{}
拉取请求: #59354
魔法工厂方法接受多个数组
动态
has*()
工厂方法(例如,
hasPosts()
,
hasTags()
现在接受多个数组,因此您可以为每个相关模型传递不同的属性集,而无需使用
forEachSequence()
手动:
用户
::
工厂
()
->
有帖子
([
'标题'
=>
“第一篇帖子”
], [
'标题'
=>
“第二篇帖子”
])
->
创造
();
在底层,传递多个数组会触发某些操作。
forEachSequence()
为每个数组创建一个具有给定属性的相关模型。
拉取请求: #59343
其他修复和改进
队列和工作者:
模型与数据库:
- 固定的
TablePivot 模型中属性递增不起作用 #59336 ) - 已确保
ScopedBy属性与继承一起使用( #59332 ) - 允许将枚举传递给模型属性( #59297 )
- 已确保
connectUsing()与UnitEnum( #59306 )
收藏品:
sum()回调函数现在接收项目键作为第二个参数( #59322 )
HTTP 和流媒体:
- 处理异常
eventStream()防止致命错误( #59292 ) - 固定的
LazyPromise::wait()与 Guzzle 的签名兼容性PromiseInterface( #59301 )
测试:
- 修复了缺失
assertDontSeeInHtml()否定断言( #59303 )
错误页面:
- 为异常渲染器添加了移动安全区域内边距支持( #59341 )
表现:
- 改进了原始 SQL 绑定替换性能( #59277 )





