Collections 原则:在集合之间移动实体,带有唯一约束&;级联删除

Collections 原则:在集合之间移动实体,带有唯一约束&;级联删除,collections,orm,doctrine,Collections,Orm,Doctrine,具有一组车轮的给定实体汽车: @var Collection<Wheel> @ORM\ManyToMany(cascade={"all"}, orphanRemoval=true) @ORM\JoinTable( joinColumns={@ORM\JoinColumn(onDelete="CASCADE")}, inverseJoinColumns={@ORM\JoinColumn(unique=true, onDelete="CASCADE")} ) @var集

具有一组车轮的给定实体汽车:

@var Collection<Wheel>
@ORM\ManyToMany(cascade={"all"}, orphanRemoval=true)
@ORM\JoinTable(
    joinColumns={@ORM\JoinColumn(onDelete="CASCADE")},
    inverseJoinColumns={@ORM\JoinColumn(unique=true, onDelete="CASCADE")}
)
@var集合
@ORM\ManyToMany(级联={“全部”},孤立删除=真)
@ORM\JoinTable(
joinColumns={@ORM\JoinColumn(onDelete=“CASCADE”)},
inverseJoinColumns={@ORM\JoinColumn(unique=true,onDelete=“CASCADE”)}
)
有一个独特的约束,防止车轮连接到两辆车上,并启用级联删除和孤立删除(当汽车被删除时,其车轮也将被删除)

工作是把轮子从一辆汽车转移到另一辆汽车上。 由于车轮不知道它与汽车的关系(这是有原因的,示例简化了),因此不能更新车轮,而必须更新两辆汽车

第一次尝试:

  • 从第一辆车上拆下车轮
  • 把它挂在第二辆车上
  • 更新第一辆车
  • 更新第二辆车
第三步删除轮子。糟糕

第二次尝试:

  • 从第一辆车上拆下车轮
  • 把它挂在第二辆车上
  • 更新第二辆车
  • 更新第一辆车
第三步违反了惟一约束。糟糕


我想不出一个转移方向盘的方法。非常感谢您的帮助。

我会在不删除孤立项的情况下尝试,因为您使用的是级联删除,所以似乎没有必要这样做。还有-为什么是多个而不是一个多个?因为轮子在另一个我无法控制的包中,我必须使用多个关系。这是实现这种关系的唯一途径,而不必触碰轮子。移除孤儿移除对我有什么帮助?我相信是孤儿移除在第三步中删除了轮子。如:使用OrphanRemoving=true选项原则时所述,假设实体为私有,不会被其他实体重用。如果忽略此假设,即使您将孤立实体分配给另一个实体,您的实体也会被条令删除。