2010-08-06 102 views
2

當我要創造我的形式一個新的對象,教義把我的錯誤: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); 

編輯:

我給你,我的功能

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

嗯...好吧,你的基本形式或模式定義沒有錯。它看起來像你正在取消設置現有記錄的ID並試圖保存它或什麼......你如何創建/修改表單對象之前保存? – 2010-08-06 09:19:00

+0

我添加了保存對象的方法。我發現錯誤在哪裏,但我不明白我如何刪除它。 問題是我的測試知道我是否創建一個對象或者如果我更新。 我怎麼知道這個? 因爲錯誤來自$ form-> getObject-> isNew()。 – Elorfin 2010-08-09 08:32:01

回答

0

您的類型是整數(2),這意味着您的表中只能有100個元素。我猜想在元素101中,數據庫引擎嘗試將0寫爲id。

相關問題