2013-05-28 37 views
0

我有一个教条实体映射的问题。 有一个基本的用户实体,我想创建一个Friend实体,由两个外键组成的用户表,友谊的第一个所有者和另一个。 我试图这样做(yaml),实体生成的方式是正确的,但是当我使用doctrine scheme更新创建数据库时,它具有完全不同的结果。Symfony2/Doctrine2关系相同的对象两次

用户实体:

..\..\Entity\User: 
type: entity 
uniqueConstraints: 
    usernameCanonical: 
     columns: usernameCanonical 
    emailCanonical: 
     columns: emailCanonical 
oneToMany: 
    owners: 
     targetEntity: Friend 
     mappedBy: owner 
    friends: 
     targetEntity: Friend 
     mappedBy: friend 

而且朋友实体:

..\..\Entity\Friend: 
type: entity 
table: friend 
lifecycleCallbacks: 
    prePersist: [setCreated, setModified] 
    preUpdate: [setModified] 
manyToOne: 
    owner: 
     targetEntity: User 
     inversedBy: friends 
     joinColumn: 
      name: user 
      referencedColumnName: id 
      onDelete: cascade 
    friend: 
     targetEntity: User 
     inversedBy: owners 
     joinColumn: 
      name: user 
      referencedColumnName: id 
      onDelete: cascade 

这应该从相知到用户创建两个陌生的,而是它创造一个这样的:

ALTER TABLE friend ADD CONSTRAINT FK_55EEAC618D93D649 FOREIGN KEY (user) REFERENCES users (id) ON DELETE CASCADEe 
+0

这对我来说不是很清楚你想做什么。你想在你的朋友实体中做什么?你不能在你的用户实体中使用多对多的自引用吗? – copndz

+0

基本上映射2个用户实体在一起,但我确实不喜欢使用映射,只有两个int值,没有任何外键 – ghostika

+0

你应该看看Doctrine文档(ManyToMany Self-referencing):http://docs.doctrine -project.org/en/2.0.x/reference/association-mapping.html#many-to-many-self-referencing – copndz

回答

2

常见的“朋友”关系是ManyToMany SelfReferencing学说关系,它在0中用作示例

+0

非常感谢,完美。一个简单的问题,你知道吗?我可以怎样扩展与其他领域的“朋友表”,比如createdAt?或者因为它不是一个真正的实体,我不能? – ghostika

+0

如果你想这样做,这不是一个ManyToMany关系,而是一对一多对多。你必须创建一个FriendUser实体,其中包含2个用户实体作为主要组合键,并且你想要的每个属性 – copndz

+0

嗯,那么我不明白为什么我的原始代码没有工作,因为我有一个用户和一个朋友实体,你建议。 – ghostika