Doctrine2映射:映射到一个字段的2个字段(ManyToOne)

时间:2012-11-27 02:17:37

标签: php orm doctrine-orm

我有2个实体,即Match和Team。一个团队可以拥有一对多的匹配。但是,我的Match实体包含两个引用同一实体Team的字段。他们是$ homeTeam和$ awayTeam。如何在Team,$ matches中引用相同的字段作为双向关系?

我目前的非工作代码如下:

我的匹配实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="match")
 **/
class Match {

    /**
     * @ORM\ManyToOne(targetEntity="Team", inversedBy="matches")
     * @ORM\JoinColumn(name="home_team_id", referencedColumnName="id")
     * **/
    protected $homeTeam;

    /**
     * @ORM\ManyToOne(targetEntity="Team", inversedBy="matches")
     * @ORM\JoinColumn(name="away_team_id", referencedColumnName="id")
     * **/
    protected $awayTeam;

我的团队实体(我认为不正确?):

/**
 * @ORM\Entity
 * @ORM\Table(name="team")
 * **/
class Team {

    /** @ORM\OneToMany(targetEntity="Match", mappedBy="homeTeam", mappedBy="awayTeam") **/
    protected $matches;

1 个答案:

答案 0 :(得分:9)

浏览Doctrine's official docs后:您无法添加多个mappedBy列。除此之外,您可以选择:

  1. Match创建自定义存储库并定义方法getAllMatchesForTeam($team)
  2. $homeMatches上定义适当的关系$awayMatchesgetAllMatches() +方法Team以及$homeMatches$awayMatches的联合结果
  3. 在这里阅读更多内容:

    1. https://stackoverflow.com/questions/13922047/symfony2-doctrine2-how-to-implement-methods-on-entity-to-retrieve-related-ent
    2. Custom repository class in Symfony2
    3. Fetching data through a custom repository in a Twig extension
    4. How can I access a service outside of a controller with Symfony2?
相关问题