【问题标题】:prePersist to check null objectprePersist 检查空对象
【发布时间】: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


    【解决方案1】:

    我没有验证它是否有效,但您可以尝试在保留 Anthropometry 之前取消设置参数(因为您不需要保留参数):

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

    【讨论】:

    • 我正在开发的项目将停止一段时间。但我认为这会奏效。谢谢!!
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 2023-01-05
    • 2014-03-01
    • 2018-12-21
    • 2015-11-20
    • 2015-02-20
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多