8

我有 2 个实体,即 Match 和 Team。一个团队可以有一对多的比赛。但是,我的 Match 实体 consts 的 2 个字段引用了相同的实体 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;
4

1 回答 1

9

在探索了Doctrine 的官方文档之后:你不能添加多个mappedBy列。取而代之的是,您可以选择:

  1. 创建自定义存储库Match并定义方法getAllMatchesForTeam($team)
  2. 在和那里定义适当的关系$homeMatches$awayMatches+方法和联合结果getAllMatches()Team$homeMatches$awayMatches

在这里阅读更多:

  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?
于 2012-12-18T07:00:55.887 回答