我在ManyToOne关系中有两个人:
A *-->1 B
B有一个功能:
public addA(A $item) {
$this->As[] = $item
}
问题是可以将A的相同实例多次添加到B的实例中,这样做甚至一个额外的时间也会导致连接表中出现主键约束错误。
我知道我可以通过在添加它之前检查A实例是否已经绑定到B的实例来解决这个问题,但是有没有办法在Doctrine本地实现这个相同的功能?即,如果它会导致关系中的重复值,我可以让学说忽略插入吗?
答案 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。