,如果你想添加第三個領域,你不能用一個多對多的關係,但中間實體不必與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
哇感謝,不知道u能做到這一點。我會嘗試使用這個邏輯。 – StrikoMirko
是的,別忘了調整Human和HumanAttribute實體中的字段,它不再是ManyToMany,而是@ORM \ OneToMany(targetEntity =「HumanHasAttribute」,mappedBy =「human」)(在Human實體中)和@ORM \ OneToMany(targetEntity = 「HumanHasAttribute」,mappedBy =「humanAttribute」)在HumanAttribute實體^^ – Sybio
是的,我想這表示謝謝:)。我可以將此實體的形式嵌入到人體實體形式中,並一次添加所有內容。 – StrikoMirko