原则 - 如果关系已存在,则不要将实体添加到关系中

时间:2014-05-05 23:12:58

标签: php symfony doctrine-orm

我在ManyToOne关系中有两个人:

A *-->1 B

B有一个功能:

public addA(A $item) {
    $this->As[] = $item
}

问题是可以将A的相同实例多次添加到B的实例中,这样做甚至一个额外的时间也会导致连接表中出现主键约束错误。

我知道我可以通过在添加它之前检查A实例是否已经绑定到B的实例来解决这个问题,但是有没有办法在Doctrine本地实现这个相同的功能?即,如果它会导致关系中的重复值,我可以让学说忽略插入吗?

1 个答案:

答案 0 :(得分:0)

Doctrine's indexed associations允许您通过主键索引关系数组,这将保证在添加项目时不会出现重复项。

/**
 * @OneToMany(targetEntity="A", mappedBy="B", indexBy="primary_key_of_a")
 **/
private $As;

public addA(A $item) {
    $this->As[$item->getPrimaryKey()] = $item
}

<强>更新

虽然上面的答案将保证每个关系只存在一次,但是学说可能会删除/重新插入现有关系,具体取决于它的添加方式。有关如何仅根据需要向/从数据库添加/删除关系的更多信息,请参阅my answer here