如果有可能通过学说制造某些东西,我就会徘徊...... 我会试着解释一下: 你有像人类一样的对象。他/她有身高,体重等属性。 现在我们有2个表“人类”和“human_attributes”。对于多对多关系,我们必须创建第三个表“human2human_attributes”,该表自己生成,其中包含列出的表中的id-s。我想要的是在两个id字段旁边放一个值字段,比如
id_human id_human_attribute value
2 12 180cm
转换为人类id-2的具有值为180cm的属性id-12(高度)。
是否有可能在学说中做这样的事情,如果有人知道如何在Symfony2中实现它?
感谢。
答案 0 :(得分:1)
如果要添加第三个字段,不能使用ManyToMany关系而是使用中间实体,则没有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;
}
请注意,由于@ORM \ Table的uniqueConstraints参数,我添加了一个唯一的SQL约束,即人类和人类属性都是唯一的(如果它尊重系统的逻辑,否则删除有关唯一性的行,或者还添加值领域,或者你想要什么^^)!
在验证添加唯一验证器时也不要忘记(如果它是唯一的):
* @UniqueEntity(
* fields={"human", "humanAttribute"},
* message="A human can't have the same attribute 2 times."
* )
class HumanHasAttribute