我将通过示例(更清楚)展示该案例:我有“ Groupies”(因为group是保留名称),而我有Companies。 一个Groupie可能会选择多个公司,而相同的公司则相反(典型的ManyToMany关联)。

问题是:我需要保留一些特定于关联本身的其他数据(我们称其为“选择”)。 因此,ManyToMany被两对OneToMany / ManyToOne关联所取代,现在每个“选择”只有一个“ Groupie”和一个公司。 每个类的学说元数据为:

Company.orm.yml:

Acme\AppBundle\Entity\Company:
  type: entity
  #fields...
  oneToMany:
      choices:
        targetEntity: Acme\AppBundle\Entity\Choice
        mappedBy: company

Groupie.orm.yml:

Acme\AppBundle\Entity\Groupie:
  type: entity
  #fields...
  oneToMany:
      choices:
        targetEntity: Acme\AppBundle\Entity\Choice
        mappedBy: groupie

Choice.orm.yml:

Acme\AppBundle\Entity\Choice:
  type: entity
  #fields...
  manyToOne:
    company:
      targetEntity: Acme\AppBundle\Entity\Company
      inversedBy: choices
  manyToOne:
     groupie:
      targetEntity: Acme\AppBundle\Entity\Groupie
      inversedBy: choices

问题是,当我运行命令时:

php app/console doctrine:schema:update --dump-sql

似乎只能识别两个关系(群组)之一:

CREATE TABLE choice (id INT AUTO_INCREMENT NOT NULL, groupie_id INT DEFAULT NULL, creationDate DATE NOT NULL, orderNumber SMALLINT NOT NULL, numberOfAccounts SMALLINT NOT NULL, INDEX IDX_43CA0AD68D0C5D40 (choice_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE choice ADD CONSTRAINT FK_43CA0AD68D0C5D40 FOREIGN KEY (groupie_id) REFERENCES groupie (id);

我当然做错了,但是我找不到如何将ManyToMany分成两对详细的OneToMany / ManyToOne关联的方法。 这样,Choice.orm.yml中的最后一个“ manyToOne”元数据似乎会覆盖前一个。 实际上,如果我先编写分组“ manyToOne”,然后再编写公司的分组,那么最后一个(公司)是选择表中的唯一外键!

===============>>#1 票数:1 已采纳

您的问题有答案:

将相同类型的所有关联归入相同的缩进级别。

Acme\AppBundle\Entity\Choice:
   type: entity
   #fields...
   manyToOne:
     company:
      targetEntity: Acme\AppBundle\Entity\Company
      inversedBy: choices
     groupie:
      targetEntity: Acme\AppBundle\Entity\Groupie
      inversedBy: choices

  ask by leoxmb translate from so

未解决问题?本站智能推荐:

关注微信公众号