我有ID的@Embeddable
类:
/**
* @ORMEmbeddable()
*/
final class Id
{
/**
* @ORMId()
* @ORMColumn(type="string")
*/
private $id;
//getters, setters, etc
}
和两个具有@ManyToOne
关系的类:
/**
* @ORMEntity()
*/
final class Gist
{
/**
* @var Id
*
* @ORMId()
* @ORMEmbedded(class="AppEntityId")
*/
private $id;
/**
* @var User
*
* @ORMManyToOne(targetEntity="AppEntityUser")
*/
private $user;
//getters, setters, etc
}
和User
类:
/**
* @ORMEntity()
*/
final class User implements UserInterface
{
/**
* @var Id
*
* @ORMEmbedded(class="AppEntityId")
*
*/
private $id;
//getters, setters, etc
}
当我尝试创建架构时,我会发现错误: No mapping found for field 'id' on class 'AppEntityUser'.
。我做错了什么?
没有解决方案。https://github.com/doctrine/doctrine2/issues/7094。
@embeddable内的标识符的支持还不到,对不起。
我建议不要在ID字段上使用@embeddable。因为它行不通。正常声明您的身份证字段,应该有效。
/**
* @ORMEntity()
*/
class Gist
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
/**
* @var User
*
* @ORMManyToOne(targetEntity="AppEntityUser")
* @ORMJoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
//getters, setters, etc
}
/**
* @ORMEntity()
*/
class User implements UserInterface
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
//getters, setters, etc
}
单向
并且永远不要将实体声明为最终类,请参见:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/reference/architecture.html#entity