0

我遇到了一个映射实体的主键没有被学说检测到的问题。

我有 2 个表,用户和操作员。用户和运营商之间存在单向的多对一关系。

用户实体定义为

XXX\SecurityBundle\Entity\User:
    type: entity
    repositoryClass: XXX\SecurityBundle\Repository\UserRepository
    table: XXX_USER
    id:
        id: 
            type: integer
            unsigned: false
            nullable: false
            column: ID
            generator:
                strategy: AUTO
    fields:
        username:
            type: string
            length: 32
            nullable: false
            column: USERNAME
...
    manyToOne:
        operator:
            targetEntity: XXX\CoreDataBundle\Entity\Operator
            joinColumn:
            name: operator_id
            referencedColumnName: id

运营商实体定义为

XXX\CoreDataBundle\Entity\Operator:
    type: entity
    respositoryClass: XXX\CoreDataBundle\Repository\OperatorRepository
    table: OPERATORS
    id:
        id:
            type: integer
            unsigned: false
            nullable: false
            column: ID
            generator:
                strategy: AUTO
    fields:
        operName:
            type: string
            length: 32
            nullable: false
            column: OPERATOR_NAME    

验证架构时,我收到以下错误:

  • 引用的列名“id”必须是目标实体类“XXX\CoreDataBundle\Entity\Operator”上的主键列。

当我尝试将操作员分配给用户时,我收到以下错误:

[ErrorException]
注意:未定义的索引:id in vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line
607

据我所见,“id”被设置为运营商实体的主键。教义背后的数据库是oracle,与实体定义同步,并且在数据库上正确设置了主键。

任何人都能够发现我在定义映射时的错误?

我不认为实体位于不同捆绑包中的事实是一个问题,因为我在同一个捆绑包中遇到了类似的问题。

谢谢你。

4

1 回答 1

0

Oracle 的列名和表名总是大写的。因此,如果使用它们,您需要将 referencedColumnName 大写,即使在 PHP 端它是小写的。

于 2016-12-01T18:41:35.190 回答