views:

136

answers:

0

Hello,

When I want to create a new object with one of my form, Doctrine take me an error :

Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'

Creating worked previously, but I don't know what I have change to have an error now.

My schema for ID :

Logement:
  connection: doctrine
  actAs: [Timestampable]
  tableName: logement
  columns:
    id:
      type: integer(2)
      unsigned: true
      primary: true
      autoincrement: true

In my forms : BaseLogementForm.class.php

$this->setWidgets(array(
             'id' => new sfWidgetFormInputHidden(),
              ... other widgets);

$this->setValidators(array(
             'id' => new sfValidatorCHoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)),
             ... other validators);

Edit :

I give you, my functions

public function executeNew(sfWebRequest $request){
  // Retourne un formulaire pour la création d'un nouveau logement
    $this->form = new logementForm();
  }

  public function executeCreate(sfWebRequest $request){
  // Génére un formulaire pour la création d'un nouveau logement

    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new logementForm();

    $this->processForm($request, $this->form);

    // Affichage du formulaire dans le template "newSuccess"
    $this->setTemplate('new');
  }

  protected function processForm(sfWebRequest $request, sfForm $form){
  // Vérifie les données d'un formulaire et les enregistre dans la base

    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));

    // On teste pour savoir dans quel cas on se situe : création/modification
    // Si il s'agit d'une création :
    if ($form->getObject()->isNew()) {
        // Vérification de la validité des données entrées
        if ($form->isValid()) {
            // Si les données sont valides, enregistrement dans la base
            $logement = $form->save(); 

            // On vérifie que l'enregistrement à bien eu lieu
            if ($form->save()) {
                $this->getUser()->setFlash('notice', 'Création du logement effectuée');
            }
            else {
                $this->getUser()->setFlash('error', 'Erreur lors de la création du logement');
            }

            // Redirection vers la fiche du logement nouvellement créé
            $this->redirect('logement/fiche?id='.$logement->getId());   
        }
        // Sinon affichage d'un message d'erreur
        else {
            $this->getUser()->setFlash('error', 'Informations saisies non valides');
        }
    }