Symfony 检查空对象的前置器
我有这门课:Symfony 检查空对象的前置器,symfony,doctrine-orm,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
* @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检查字段是否为空
像这样的
//class Parameter
/**
*
* @ORM\prePersist
*/
public function prePersist(){
if($this->getData() == NULL){
return false;
}
}
谢谢 我没有验证它是否有效,但您可以尝试在保留人体测量之前取消设置参数(因为您不需要保留参数):
我正在开发的项目将暂停一段时间。但我认为这会奏效。谢谢!!
//class Anthropometry
/**
* @ORM\prePersist
*/
public function prePersist()
{
if(!is_null($this->parameter) && $this->parameter->getData() == null){
$this->parameter = null;
}
}