代码之家  ›  专栏  ›  技术社区  ›  Elorfin

symfony:主键存在“违反完整性约束”问题

  •  2
  • Elorfin  · 技术社区  · 15 年前

    当我想用我的一种形式创造一个新的对象时,教义会给我一个错误:

    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
    

    在我的表单中:baselogmentform.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');
            }
        }
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Sergio    14 年前

    您的类型是整数(2),这意味着您的表中只能有100个元素。我猜在元素101中,db引擎尝试将0作为id写入。