Doctrine级联持久性从不检查对象是否存在Symfony 2

时间:2016-05-12 17:39:21

标签: symfony doctrine cascade entities

我有一个保存查询的表单。这是按照一个人的方式进行组织,这个人也会保存,这会产生一个威胁,即保存id_question和emailperson。问题是同一个人做了另一个问题。从逻辑上讲,这会报告主键错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'drj00003@ujaen.es' for key 'PRIMARY'

我该如何解决?在类I的构造函数中,无法检查是否存在,并且所有寄存器都是在没有形式的情况下以级联方式自动生成的。 它应该很容易,但我无法解决这个问题。

class HiloType extends AbstractType{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('consultanteemail', new ConsultanteType(), array ('label' => false))
        ->add('personalemail', 'entity', array(
            'label' => 'Personal de Soporte',
            'class' => 'GuiasDocentes\AppBundle\Entity\Personal',
            'property' => 'Enunciado',
            'by_reference' => 'false',
            'query_builder' => function(PersonalRepository $pr) {
                $query= $pr->createQueryBuilder('u')
                ;
                return $query;
            },
            'empty_value' => 'Elige un perfil de consulta:',
            ))
    ;
} 

...

class Hilo{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $id;

/**
 * @var \GuiasDocentes\AppBundle\Entity\Personal
 *
 * @ORM\ManyToOne(targetEntity="Personal", inversedBy="hilos", cascade ={"ALL"})
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="personalEmail", referencedColumnName="email")
 * })
 */
private $personalemail;

/**
 * @var \GuiasDocentes\AppBundle\Entity\Consultante
 *
 * @ORM\ManyToOne(targetEntity="Consultante", inversedBy="hilos", cascade ={"ALL"} )
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="consultanteEmail", referencedColumnName="email")
 * })
 */
private $consultanteemail;


/* Customized code */

/**
 * @ORM\OneToMany(targetEntity="GuiasDocentes\AppBundle\Entity\Consulta", mappedBy="hiloid")
 * @Assert\Valid()
 */
private $consultas;

public function __construct(){

    $this->consultas = new ArrayCollection();
}

public function setConsultas (Consulta $consulta){
    $this->hilos[]=$consulta;
}

public function addConsulta (\GuiasDocentes\AppBundle\Entity\Consulta $consulta){
    $this->hilos[] = $consulta;
}


/* End customized code */ 

...

class Consultante{
/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=50, nullable=false)
 * @ORM\Id
 */
private $email;

/**
 * @var string
 *
 * @ORM\Column(name="nombre", type="string", length=30, nullable=true)
 */
private $nombre;

/**
 * @var string
 *
 * @ORM\Column(name="apellidos", type="string", length=50, nullable=true)
 */
private $apellidos;

/* Customized code */

/**
 * @ORM\OneToMany(targetEntity="GuiasDocentes\AppBundle\Entity\Hilo", mappedBy="consultanteemail")
 * @Assert\Valid()
 */
private $hilos;

public function __construct(){
    $this->hilos = new ArrayCollection();
}

public function setHilos (Hilo $hilo){
    $this->hilos[]=$hilo;
}

public function addHilo (\GuiasDocentes\AppBundle\Entity\Hilo $hilo){
    $this->hilos[] = $hilo;
}

public function setEmail($email)
{
    $this->email = $email;
    return $this;
}

/* End customize code */

...

    public function contactoAction (Request $request){
    $session = $request->getSession();
    $perfil = $session->get('perfil');
    $consultaHasAsignatura = new ConsultaHasAsignatura();
    $form = $this->createForm(new ConsultaHasAsignaturaType(), $consultaHasAsignatura);
    if ($request->isMethod('POST')){
        $form->handleRequest($request);
        if($form->isValid()){
            $em = $this->getDoctrine()->getManager();
            $em->persist($consultaHasAsignatura);
            $em->flush();
            return $this->redirectToRoute('guias_docentes_app_homepage');
        }
    }
    return $this->render('GuiasDocentesAppBundle:FAQ:contacto.html.twig', array('perfil'=>$perfil, 
        'form' => $form->createView()
    ));
}

0 个答案:

没有答案