2013-06-03 70 views
0

如果有可能通過教義做出某些事情,我就在流浪... 我會盡力解釋: 你有一個像人類一樣的物體。他/她有屬性,如身高,體重等。 現在,我們有2個表格「人類」和「人類屬性」。對於多對多的關係,我們必須創建第三個表「human2human_attributes」,該表由doctrine自己生成,其中列出了表中的id。我要的是把旁邊兩個ID域值字段,如關於ManyToMany關係的教義和Symfony 2

id_human id_human_attribute value 
    2    12   180cm 

其轉化爲人力ID-2具有屬性ID-12(高)與價值180釐米。

有沒有可能在教條中做這樣的事情,如果有人知道如何在Symfony2中實現它?

謝謝。

回答

1

,如果你想添加第三個領域,你不能用一個多對多的關係,但中間實體不必與doctrine2選擇:

/** 
* @ORM\Entity() 
* @ORM\Table(name="human_has_attribute", 
*  uniqueConstraints = { 
*   @ORM\UniqueConstraint(name="unique_human_human_attribute", columns={"human_id", "human_attribute_id"}) 
*  } 
*) 
*/ 
class HumanHasAttritube 
{ 
    // ... 

    /** 
    * @var Human 
    * 
    * @ORM\ManyToOne(targetEntity="Human", inversedBy="humanHasAttributes") 
    * @ORM\JoinColumn(name="human_id", referencedColumnName="id") 
    */ 
    protected $human; 

    /** 
    * @var HumanAttribute 
    * 
    * @ORM\ManyToOne(targetEntity="HumanAttribute", inversedBy="humanHasAttributes") 
    * @ORM\JoinColumn(name="human_attribute_id", referencedColumnName="id") 
    */ 
    protected $humanAttribute; 

    /** 
    * @var string 
    * 
    * @ORM\Column(type="string", length=255) 
    */ 
    protected $value; 
} 

請注意我添加了一個獨特的SQL約束感謝到@ORM \ Table的uniqueConstraints參數,即人和人的屬性都是唯一的(如果它尊重系統的邏輯,否則刪除有關唯一性的行,或者添加值字段,或者你想要的^^)!

驗證時增添獨一無二的驗證太(如果它是唯一的)不要忘記:

* @UniqueEntity(
*  fields={"human", "humanAttribute"}, 
*  message="A human can't have the same attribute 2 times." 
*) 
class HumanHasAttribute 
+0

哇感謝,不知道u能做到這一點。我會嘗試使用這個邏輯。 – StrikoMirko

+0

是的,別忘了調整Human和HumanAttribute實體中的字段,它不再是ManyToMany,而是@ORM \ OneToMany(targetEntity =「HumanHasAttribute」,mappedBy =「human」)(在Human實體中)和@ORM \ OneToMany(targetEntity = 「HumanHasAttribute」,mappedBy =「humanAttribute」)在HumanAttribute實體^^ – Sybio

+0

是的,我想這表示謝謝:)。我可以將此實體的形式嵌入到人體實體形式中,並一次添加所有內容。 – StrikoMirko