使用Doctrine2时遇到一个奇怪的问题。

我收到以下错误:

教义:验证模式

[Mapping]  FAIL - The entity-class 'EmailVerification' mapping is invalid:
* The referenced column name 'id' does not have a corresponding field with this
 column name on the class 'OurUsers'.

[Database] OK - The database schema is in sync with the mapping files.


我的情况如下:


我有3个表共享一个主键。
Auth包含user_id PK。
共享OurUsers的表Auth.user_id PK。
共享EmailVerification的表OurUsers.user_id PK。
我也有NotOurUsers-因此分裂。


实体声明如下:

/**
 * @Entity
 * @Table(name="auth")
 */
class Auth {
    /** @Id @Column(type="integer", name="user_id") @GeneratedValue @var int */
    private $id;

    /* ... */
}

/**
 * @Entity
 * @Table(name="our_users")
 */
class OurUsers {
    /**
     * @Id
     * @OneToOne(targetEntity="Auth")
     * @JoinColumn(nullable=false, name="user_id", referencedColumnName="user_id")
     * @var Auth
     */
    private $id;

    /* ... */
}

/**
 * @Entity
 * @Table(name="email_verification")
 */
class EmailVerification {
    /**
     * @Id
     * @OneToOne(targetEntity="OurUsers")
     * @JoinColumn(nullable=false, name="user_id", referencedColumnName="user_id")
     * @var OurUsers
     */
    private $id;

    /* ... */
}


我正在使用Dosctrine 2.1。

btw Doctrine 2.2验证了映射效果良好,但是在运行时却遇到了与2.1相同的错误。

最佳答案

我认为问题在于EmailVerfication指向OurUSers与Auth之间的联系,但错误消息却具有误导性。我不确定内部是否可以进行三重映射(我很确定我在某些地方也为此实现了例外,我必须看看为什么不触发此例外)。

10-08 02:04