如果要添加不能使用 ManyToMany 关系但不能使用中间实体的第三个字段,则无法选择使用 dictionary2:
/**
* @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;
}
请注意,由于@ORM\Table 的 uniqueConstraints 参数,我添加了一个唯一的 SQL 约束,即 human 和 humanAttribute 都是唯一的(如果它尊重您的系统的逻辑,否则删除有关唯一性的行,或者还添加 value 字段,或者你想要什么^^)!
验证时不要忘记添加唯一验证器(如果它是唯一的):
* @UniqueEntity(
* fields={"human", "humanAttribute"},
* message="A human can't have the same attribute 2 times."
* )
class HumanHasAttribute