清除相关表单字段后删除关联实体

Remove associated entity after clearing related form fields

我有 Company 个实体与 Manager 个实体有 One-To-One 关系。我使用表单组件进行编辑。
当我清除表单上所有经理的字段时 - 相关的数据库字段也被清除(但行本身仍然存在),这不是理想的行为。在这种情况下,必须从数据库中删除该行。
如何实现?

这是理想的行为,因为 Doctrine 是一个对象关系映射器。如果 Manager 仍然存在于所有字段 null 的模型中,它将被保存为 table 行,其中包含 id 和所有其他字段 null

也就是说,您可以在业务逻辑中轻松实现您的行为。一个简单的方法是允许:

public function setManager(Manager $manager = null) {
    $this->manager = $manager;
}

请注意,重要的部分不是 setter 方法本身,而是您设置为 null $this->manager 属性 的事实。然后在你的控制器动作中做:

if ($form->isValid()) {
    if (<all properties are null>) {
        $entityManager->remove($company->getManager());
        $company->setManager(null);
    }
    // your other logic here
    $entityManager->persist($company);
    $entityManager->flush();
}

当然,这会将一些逻辑放到控制器中,这不是最干净的方法,但却是一个好的开始。当您对 Doctrine 有信心时,您可以重构级联删除和绑定到 onFlush 事件的 EventListener 中的 setManager(null)。请参阅 official doc