Jean francois LEFLOCH
Jean francois LEFLOCH

Reputation: 83

Symfony Integrity constraint violation: 1062 Duplicate entry '1' for key

I realized my error but I do not know how to solve it. I have two table, Car and Advertisement, I wish performed a nested form to add data into tables. But I have an error message, which says:

An exception occurred while executing

INSERT INTO car (year, model, engine_size, colour, mileage, advertisement_id, fuel_id, transmission_id, body_id, make_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

with params ["2012", "a3", "v8", "45", 4, 26, 1, 1, 1, 1].

Exception:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_773DE69D78D28519'

My question is: Why my method does not retrieve the id of my entity to put it in the entity advertisement ?

Relation

 /**
 *
 * @ORM\OneToOne(targetEntity="Home\HomeBundle\Entity\Advertisement", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $Advertisement;

public function setAdvertisement(\Home\HomeBundle\Entity\Advertisement $advertisement)
{
    $this->Advertisement = $advertisement;

    return $this;
}

Form

class CarType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('year')
        ->add('model')
        ->add('engineSize')
        ->add('colour')
        ->add('mileage')
        ->add('Advertisement', new AdvertisementType())
        ->add('Fuel')
        ->add('Transmission')
        ->add('Body')
        ->add('Make')
    ;
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Home\HomeBundle\Entity\Car'
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'home_homebundle_car';
}
}

Controller

public function createAction(Request $request)
{
    $entity = new Car();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('car_show', array('id' => $entity->getId())));
    }

    return $this->render('HomeBundle:Car:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}

/**
 * Creates a form to create a Car entity.
 *
 * @param Car $entity The entity
 *
 * @return \Symfony\Component\Form\Form The form
 */
private function createCreateForm(Car $entity)
{
    $form = $this->createForm(new CarType(), $entity, array(
        'action' => $this->generateUrl('car_create'),
        'method' => 'POST',
    ));

    $form->add('submit', 'submit', array('label' => 'Create'));

    return $form;
}

Upvotes: 1

Views: 3058

Answers (1)

Seif Sayed
Seif Sayed

Reputation: 803

One to one relationship, and you have an entity having the same ID in your database.

Upvotes: 3

Related Questions