prePersist для проверки нулевого объекта - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть этот класс:

 * @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;

Но теперь в моей базе данных параметры сохраняются с полем «Данные» = NULL

Могу ли я проверить с помощью prePersist, является ли поле NULL перед сохранением?

как то так?

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

Thx!

1 Ответ

0 голосов
/ 03 апреля 2012

Я не проверял, работает ли он, но вы можете попробовать сбросить параметр перед сохранением антропометрии (поскольку вам не нужно сохранять параметры):

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