【发布时间】:2012-04-02 18:48:02
【问题描述】:
我有这门课:
* @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;
...
}
在我的控制器中,我正在创建一个表单并在同一个操作中进行验证。 要创建表单,我需要实例一个参数。但不需要坚持他。
所以.. 当我调用 $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;
}
}
谢谢!
【问题讨论】:
标签: symfony doctrine-orm