Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 检查空对象的前置器_Symfony_Doctrine Orm - Fatal编程技术网

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;
    }
}