2014-08-31 42 views
0

使用我有2个表所示:多对一关系+如何在两个方向上

Users 
    - UserID 
    - Username 
    - Password 
    - ... 
Players 
    - playerID 
    - playerName 
    - ... 
    - User 

的关系是ManyToOne(见图片),它不是必需的。

enter image description here

我和学说自动生成我的实体。在我的球员实体我有:

/** 
* @var \NV\VolleyScoutBundle\Entity\Users 
* 
* @ORM\ManyToOne(targetEntity="NV\VolleyScoutBundle\Entity\Users") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
* }) 
*/ 
protected $user; 

但我没有$player变量在我用户实体。我可以用什么方式添加这个?试图做到这一点,但给了我不同的错误。我想要做的是添加一个球员表格到我的注册表格中。

所以在我的RegisterType(=表格)我想添加->add('player', new PlayerType())。但是,如果我的用户实体中没有$ player变量,这是不可能的。

我需要在我的Users实体中为$ player设置什么类型的关系?

回答

1

您必须在用户实体中添加注释。

在球员Enity

@ORM\OneToMany(targetEntity="Players", mappedBy="user") 
protected $player; 

在用户实体:

@ORM\ManyToOne(targetEntity="Users", inversedBy="player") 
@ORM\JoinColumn(name="user_id", referendecColumn="UserId") 
proteced $user; 

这只是一个草案。您必须为目标实体编写完整的命名空间,并在有些情况下更正错误。

很多setails,你可以在这里找到:Doctrine documentation - working with association

尝试使用小个盖帽为表名,因为在linux下的MySQL不喜欢uppercaps。 $ player必须是ArrayCollection的实例

+0

谢谢!但是,当我这样做:$ user-> getPlayer()我只是得到对象(Doctrine \ ORM \ PersistentCollection)回来.. – nielsv 2014-09-01 21:44:48

+0

这应该是好的。持久集合就像数组和Player的实例一样。尝试foreach循环:$ players = $ user - > getPlayer(); foreach($ player为$ player)...这里$ player应该是player的实例。 – Matzach 2014-09-01 23:18:40

相关问题