使用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之间的联系,但错误消息却具有误导性。我不确定内部是否可以进行三重映射(我很确定我在某些地方也为此实现了例外,我必须看看为什么不触发此例外)。