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

Posted

技术标签:

【中文标题】Doctrine2 Mapping:2 个字段映射到一个字段(ManyToOne)【英文标题】:Doctrine2 Mapping: 2 fields mapped to one field (ManyToOne) 【发布时间】:2012-11-27 02:17:36 【问题描述】:

我有 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;

【问题讨论】:

我也有同样的问题,但是你需要加入 OR 条件:homeTeam OR AwayTeam,就像我的情况一样,我需要加入 AND 条件。 【参考方案1】:

探索Doctrine's official docs后:不能添加多个mappedBy列。取而代之的是,您可以选择:

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

在这里阅读更多:

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

【讨论】:

以上是关于Doctrine2 Mapping:2 个字段映射到一个字段(ManyToOne)的主要内容,如果未能解决你的问题,请参考以下文章

doctrine2 映射覆盖从 MappedSuperclass 继承的 inversedBy 字段。

从父实体映射中将可嵌入字段设置为主键 - Doctrine2

Doctrine 2 多重映射继承

Doctrine2 - 继承映射,查询子类

Doctrine2 中的条件关联

ElasticSearch03_Mapping字段映射常用类型数据迁移ik分词器自定义分词器