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

使用Doctrine与PHP Attributes创建表索引:解决ORM\Table属性indexes数组的ORM\Index语法问题

解决Doctrine ORM注解转PHP Attributes的索引配置问题

你遇到的问题核心是在ORM\Table的indexes数组中,没有正确实例化ORM\Index对象。PHP Attributes和旧的注解语法在处理嵌套配置时逻辑不同,Attributes需要显式创建对象实例,而不是依赖注解解析器的隐式转换。

正确的代码写法

#[ORM\Table(
    name: "telegram_accounts",
    schema: "users",
    indexes: [
        new ORM\Index(
            name: "subscriber_notification_idx",
            columns: ["subscriber_notification"],
            options: ["where" => "subscriber_notification = TRUE"]
        ),
        new ORM\Index(
            name: "rename_notification_idx",
            columns: ["rename_notification"],
            options: ["where" => "rename_notification = TRUE"]
        )
    ]
)]
#[ORM\Entity(repositoryClass: "Skobkin\Bundle\PointToolsBundle\Repository\Telegram\AccountRepository")]
#[ORM\HasLifecycleCallbacks]
class Account
{
    // 类的其他内容
}

关键修正点说明

  • 必须用new实例化ORM\Index:PHP Attributes中,嵌套的配置对象需要通过new关键字显式创建,这和注解中直接写@ORM\Index(...)的隐式解析逻辑完全不同。
  • 参数格式保持一致:命名参数的写法(比如name:、columns:)是正确的,继续保留即可;数组参数的括号语法也无需修改。
  • 版本兼容性检查:确保你的项目满足两个前提:
    1. PHP版本 ≥ 8.0(Attributes的最低要求)
    2. Doctrine ORM版本 ≥ 2.9(开始支持PHP Attributes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:59:06