2013-05-03 39 views
0

我使用的是Doctrine 2.假设我们有两个实体:用户错误。是否有可能与倒置侧(用户)和拥有侧的多个列(Bug)具有双向关联?逆向一侧和多侧在一侧的双向关联

Example

如果我在错误实体定义列如下:

/** @Entity */ 
class Bug { 
    /** @ManyToOne(targetEntity="User", inversedBy="associated_bugs") */ 
    protected $reported_by; 

    /** @ManyToOne(targetEntity="User", inversedBy="associated_bugs) */ 
    protected $assigned_to; 
} 

话,我不知道该怎么在用户实体写...

/** @Entity */ 
class User { 
    /** 
    * @OneToMany(targetEntity="Bug", mappedBy="???") 
    * @var Bug[] 
    **/ 
    protected $associated_bugs; 
} 

回答

1

没有这是你无法做的映射。比方说,你会设置一个错误列表User::associated_bugs。你打算如何在存储时保存这些信息?

您应该分别映射两种类型的错误,然后将它们组合在一个方法中。

/** @Entity */ 
class User { 
    /** 
    * @OneToMany(targetEntity="Bug", mappedBy="reported_by") 
    * @var Bug[] 
    **/ 
    protected $reported_bugs; 
    /** 
    * @OneToMany(targetEntity="Bug", mappedBy="assigned_to") 
    * @var Bug[] 
    **/ 
    protected $assigned_bugs; 

    protected function getAssociatedBugs() 
    { 
     return array_merge($this->reported_bugs, $this->assigned_bugs); 
    } 
} 
0

类似这样的:

/** @Entity */ 
class User { 

    /** 
    * @OneToMany(targetEntity="Bug", mappedBy="assigned_to") 
    **/ 
    protected $associated_bugs; 


    /** 
    * @OneToMany(targetEntity="Bug", mappedBy="reported_by") 
    **/ 
    protected $reported_bugs; 

} 

在错误的实体,您要添加这些注释:

对于分配错误:

@JoinColumn(name="assignee_id", referencedColumnName="id", onDelete="cascade") 

@JoinColumn(name="reporter_id", referencedColumnName="id", onDelete="cascade") 

对报告的错误

这应该做工作

+0

这正是我现在正在做的。但我想有一个*双向*关联。 – Roman 2013-05-03 12:42:38

+0

这是双向关联 – Zeljko 2013-05-03 23:08:26

+0

是的。我想说,* User *实体中有两列,但我在问只有一列的可能性。 – Roman 2013-05-04 04:24:28