Php 在插入之前删除
我有一个案例实体,它可以有多个楼层(一个楼层),每个楼层都有一个指定其类型的FloorType。我的Floors实体上还有一个UniqueConstraint,它不允许每个案例有两个相同FloorType的楼层 为了在每个案例中插入楼层,我为楼层创建了一个Symfony集合类型,并使用js将新楼层添加到案例中 Symfony的表单集合文档表示,如果某个项目未提交,它将自动从DB中删除 现在的问题是,如果我已经在DB中为一个案例设置了一个楼层,当我在表格中删除该楼层并再次添加它时,它将被视为一个新的插入,但由于条令先执行插入,最后执行删除,因此我会因违反我设置的uniqueConstraint而得到以下错误: SQLSTATE[23000]:完整性约束冲突:1062项“floors\u case\u floor\u type\u unique”的重复条目“4-2” 这意味着,在尝试从同一个表中删除最后一行之前,条令试图在Floors表中插入一行,该行的FloorType与删除的行相同Php 在插入之前删除,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我有一个案例实体,它可以有多个楼层(一个楼层),每个楼层都有一个指定其类型的FloorType。我的Floors实体上还有一个UniqueConstraint,它不允许每个案例有两个相同FloorType的楼层 为了在每个案例中插入楼层,我为楼层创建了一个Symfony集合类型,并使用js将新楼层添加到案例中 Symfony的表单集合文档表示,如果某个项目未提交,它将自动从DB中删除 现在的问题是,如果我已经在DB中为一个案例设置了一个楼层,当我在表格中删除该楼层并再次添加它时,它将被视为一个新
有没有办法让条令先删除再插入,或者有没有其他办法解决这个问题?一种方法是a。
我建议你这样你就可以: 并扩展您的FormType: 现在在您的
CaseType
的buildForm
方法中注册一个EventListener:
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) {
$data = $event->getData();
$em = $this->doctrine->getEntityManager();
foreach ($data['floor'] as $floor) {
// delete floors here...
$duplicateFloor = $em->find('YourBundle:Floor', $floor->getId);
$em->remove($duplicateFloor);
}
$em->flush();
});
我试图手动移除地板,不是在事件中,而是在表单验证后在我的控制器中。但问题是,如果我在拆除地板后进行冲洗,因为案件已经在条令的监督下,它会再次尝试在删除之前进行插入。
class CaseType /*...*/
{
private $doctrine;
public function __construct($doctrine)
{
$this->doctrine = $doctrine;
}
}
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) {
$data = $event->getData();
$em = $this->doctrine->getEntityManager();
foreach ($data['floor'] as $floor) {
// delete floors here...
$duplicateFloor = $em->find('YourBundle:Floor', $floor->getId);
$em->remove($duplicateFloor);
}
$em->flush();
});