Doctrine orm 条令2.0对2.1
您好,我在尝试级联删除OneToMany关系中的实体时遇到问题。 经过几个小时的调试后,我试图将原则从最新的2.1.2降级到2.0.2,它突然开始工作 想象两个实体的公司和地址关系1:NDoctrine orm 条令2.0对2.1,doctrine-orm,Doctrine Orm,您好,我在尝试级联删除OneToMany关系中的实体时遇到问题。 经过几个小时的调试后,我试图将原则从最新的2.1.2降级到2.0.2,它突然开始工作 想象两个实体的公司和地址关系1:N /** * @Entity */ class Company extends Entity { /** * @var integer * @id @Column(type="integer") * @generatedValue */ private $id; /** * @v
/**
* @Entity
*/
class Company extends Entity
{
/**
* @var integer
* @id @Column(type="integer")
* @generatedValue
*/
private $id;
/**
* @var Collection
* @OneToMany(targetEntity="Address",mappedBy="company", cascade={"persist","remove"})
*/
private $addresses;
}
/**
* @Entity
*/
class Address extends Entity
{
/**
* @var integer
* @id @Column(type="integer")
* @generatedValue
*/
private $id;
/**
* @var Company
* @ManyToOne(targetEntity="Company", inversedBy="addresses")
* @JoinColumn(name="company_id", referencedColumnName="id",nullable=false)
*/
private $company;
}
当我试图删除实体公司时,我希望分配的地址也将被删除
$em->remove($company);
$em->flush();
在原则2.1.2中,不执行地址删除,因此完整性约束失效。在版本2.0.2中,它可以完美地工作。值得注意的是,如果我使用EntityAudit扩展,LogRevisionListener会正确地对doctrine 2.1.2(当然在2.0.2中也是如此)中的addresses实体进行版本控制,但UnitOfWork不会删除它
在2.0.2和2.1.2中如何处理级联删除有什么不同吗
非常感谢我遇到了同样的问题,我用代码解决了他:
$em->remove($object);
$em->flush();
$em->remove($user);
$em->flush();
也许您可以在您的公司
上使用findAll
作为地址,并使用foreach
删除此地址,如下所示:
// Return all the addresses of the company
$addresses = $em->getRepository(...)->findAllAddressesByCompany($company);
$em->remove($company);
foreach ($address in $addresses)
{
$em->remove($address);
}
这不是一个很好的方法,但就目前而言,这是我发现的所有方法。尝试在您的
公司
类的地址
属性中使用此方法
@OneToMany(targetEntity="Address",mappedBy="company",
cascade={"persist"}, orphanRemoval=true)
我也有同样的问题。。。关系被添加或更新,但没有被删除,即使我有级联:[持久,删除] 我发现我不需要“cascade”中的“remove”属性,但我必须添加孤儿移除:true
我快疯了,你让我开心 我已经解决了这个问题,降低了原则的等级:)谢谢,但这不是我想要的方法:(可能是一个bug(或一个特性?)我今天也偶然发现了这个问题,我使用的是2.1.6.:/我必须纠正我自己,它现在对我有效!我使用的是
cascade={“all”}
但是当我在cascade>中更改它时={“remove”}
一切都开始正常工作。尽管我不得不说,我的问题可能不完全是由于注释集或条令本身,因为我正在对实体进行密集的操作,在对级联选项组合进行一些测试后,我发现合并了“
选项是导致问题的一个选项。希望它能有所帮助:)我使用的是原则2.2.3,但仍然是一样的。必须添加删除=true。有点奇怪,因为我没有移除一侧,所以没有创建任何孤儿。也许是因为多方都是拥有方,而我正从一方撤走。更新之所以有效,是因为多方是拥有方,我使用的是$this->addSomething(theThing)
和theThing->setSomething($this)
其中,好像我在删除某个内容,没有设置内容,只有$this->removeSomething(theThing)