2014-04-19 78 views
0

我將以例子揭示案例(它會更清晰): 我有'羣組'(因爲羣組是一個保留名稱),而我有公司。一個Groupie可能會選擇幾家公司,而相同的公司則相反(典型的ManyToMany分組)。將ManyToMany關聯分割成2對OneToMany/ManyToOne(Doctrine)

事情是:我需要堅持一些額外的數據,特別是協會本身(我們稱之爲'選擇')。因此,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 

問題是,當我運行的COMAND:

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

你有你的答案在你的問題:

集團都是一樣的縮進級別下的相同類型的關聯。

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