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

时间:2015-10-08 12:37:44

标签: php symfony symfony-forms

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

1 个答案:

答案 0 :(得分:1)

这是理想的行为,因为Doctrine是一个对象关系映射器。如果您的模型中Manager仍然存在且包含所有字段null,则会将其保存为包含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有信心时,您可以重构级联删除以及绑定到setManager(null)事件的EventListener中的onFlush。请参阅official doc