2010-08-06 2 views
2

Когда я хочу, чтобы создать новый объект с одним из моей формы, Doctrine взять меня ошибка:Symfony: Проблема «нарушение целостности ограничение» с первичным ключом

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

Создание работал ранее, но я не знаю, что у меня есть, чтобы иметь ошибку.

Моя схема для ID:

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

В моих формах: 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:

Я даю вам, мои функции

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'); 
     } 
    } 
+0

Хм ... ну нет ничего плохого в вашей базовой форме или определении вашей схемы. Похоже, вы отключаете идентификатор существующей записи и пытаетесь ее сохранить или что-то еще ... Как вы создаете/изменяете объект формы перед сохранением? –

+0

Я добавляю методы для сохранения объекта. Я нашел, где ошибка, но я не понимаю, как я могу ее удалить. Проблема заключается в моих тестах, чтобы узнать, создаю ли я объект или обновляю ли я. Как я могу узнать это? потому что ошибка исходит из $ form-> getObject-> isNew(). – Elorfin

ответ

0

Ваш тип integer (2), это значит, что вы можете иметь только 100 элементов в таблице. Я думаю, что в элементе 101 двигатель db попытается записать 0 как id.

Смежные вопросы