You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel查询构造器中正确使用PHP 8枚举类型?

在Laravel查询构造器中使用PHP 8枚举的正确方式

你定义的PHP 8字符串枚举如下:

enum OperationTypes: string
{
    case PointsAdd = 'points-add';
}

针对你提出的两种写法,结论是两种都能正常工作,但直接传入枚举实例的写法更符合最佳实践,具体说明如下:

单条件查询(where)

  • 写法1:Model::where('type', OperationTypes::PointsAdd)
    Laravel 9及以上版本会自动识别枚举类型,将其转换为对应的value值(也就是'points-add')拼入查询语句。这种写法更类型安全,能避免手动拼写字符串时出现的笔误,后续枚举定义变更时也能自动同步。
  • 写法2:Model::where('type', OperationTypes::PointsAdd->value)
    直接获取枚举的字符串值传入查询,也能得到正确结果,但缺少类型检查的保障,如果枚举的value有修改,手动取value的地方可能会遗漏更新。

多条件查询(whereIn)

  • 写法1:Model::whereIn('type', [OperationTypes::PointsAdd])
    和where逻辑一致,Laravel会自动把数组中的枚举实例转换为对应的value,同样具备类型安全的优势。
  • 写法2:Model::whereIn('type', [OperationTypes::PointsAdd->value])
    同样可行,但同样缺少类型检查的防护。

注意:如果你的Laravel版本低于9.x,框架不支持自动转换枚举实例,此时必须手动通过->value获取枚举值传入查询,否则会触发错误。

内容的提问来源于stack exchange,提问作者Čamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:27:02