prePersist检查null对象

时间:2012-04-02 18:48:02

标签: symfony doctrine-orm

我有这堂课:

 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks()
class Parameter{

    /**
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    /**
    * @ORM\ManyToOne(targetEntity="Project\Bundle\Entity\Anthropometry", inversedBy="parameter")
    * @ORM\JoinColumn(name="anthropometry_id", referencedColumnName="id")
    * 
    */
    protected $anthropometry;

    /**
     * @ORM\Column(name="data", type="string", length=255, nullable=true)
     */
    protected $data;
   ...

}

和此:

 /**
 * @ORM\Table(name="anthropometry")
 * @ORM\Entity
 */
class Anthropometry {
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * 
 * @ORM\OneToMany(targetEntity="Project\Bundle\Entity\Parameter", mappedBy="anthropometry", cascade={"persist"})
 * 
 */ 
protected $parameter;

    ...
}

在我的控制器中,我正在创建一个表单并在同一个Action中进行验证。 要创建表单,我需要一个参数实例。但不需要坚持下去。

所以......当我打电话给$ em-> flush时我得到了错误:

  

通过这种关系找到了一个新实体......

为了解决这个问题,我在注释中添加了cascade = {“persist”}:

//Class Anthropometry
...
/**
 * 
 * @ORM\OneToMany(targetEntity="Project\Bundle\Entity\Parameter", mappedBy="anthropometry", cascade={"persist"})
 * 
 */ 
protected $parameter;

但现在,在我的数据库中,参数将持久保存,字段'Data'= NULL

在持久化之前,我是否可以使用prePersist检查字段是否为NULL?

这样的事情?

//class Parameter
/**
 * 
 * @ORM\prePersist
 */
public function prePersist(){
    if($this->getData() == NULL){
        return false;
    }
}

THX!

1 个答案:

答案 0 :(得分:0)

我没有验证它是否有效但您可以在持久化人体测量法之前尝试取消设置参数(因为您不需要保留参数):

//class Anthropometry
/**
 * @ORM\prePersist
 */
public function prePersist()
{
    if(!is_null($this->parameter) && $this->parameter->getData() == null){
        $this->parameter = null;
    }
}