如何在prePersist函数中取消保存实体

时间:2012-07-04 10:21:33

标签: symfony doctrine-orm

我有一个问题:在一个过程中,我想取消在prePersit函数中保存实体:

/**
 * @ORM\PrePersist
 */
public function setTranslationsValue2()
{
    if((null===$this->getContent())or($this->getContent()==''))
    {
        //wanna stop saving this item???
       return false;
    }
}

在上述功能中,我不想再保存此实体,也不想停止我的进程(该进程仍然保存另一个)

2 个答案:

答案 0 :(得分:5)

您不能使用实体中的prePersist注释来执行此操作。您的方法存在的问题是您无法访问模型中的entityManager,但您需要告诉他不要坚持您的实体。

您可以按照教条文档http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#implementing-event-listeners

中的说明使用事件监听器

然后你会听prePersist事件,看看有问题类型的任何实体是否要求持久化,看看你的情况是否属实。如果是这样,您可以告诉entityManager分离实体。

但是我想你可以通过将内容设置为notNull并将内容转换为null(如果length为< 1.确保持久化正确的实体是域逻辑的一部分,我不会在实体本身或某些事件监听器中执行此操作。如果你有许多这样的听众和条件,你最终会得到许多人都不知道的神奇约束。

除了上述方法,您还可以实现valid()方法并检查是否满足某些条件。如果valid()为true,您的域逻辑将仅保留实体。更好的方法是使用symfony2验证器来验证您的实体,然后采取相应的行动。

答案 1 :(得分:2)

抛出新的例外("一些消息......");