【问题标题】:symfony : Problem 'Integrity constraint violation' with primary keysymfony:主键出现“违反完整性约束”问题
【发布时间】:2010-08-06 08:27:39
【问题描述】:

当我想用我的一种形式创建一个新对象时,Doctrine 给我一个错误:

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

【问题讨论】:

  • 嗯...您的基本表单或架构定义没有任何问题。看起来您正在取消设置现有记录的 id 并尝试保存它或其他什么...您如何在保存之前创建/修改表单对象?
  • 我添加了保存对象的方法。我找到了错误在哪里,但我不明白如何删除它。问题是我的测试知道我是创建一个对象还是更新。我怎么知道这个?因为错误来自 $form->getObject->isNew()。

标签: forms symfony1 doctrine primary-key


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2016-04-24
    • 2020-01-14
    • 1970-01-01
    • 2021-12-13
    • 2017-10-01
    相关资源
    最近更新 更多