Symfony: проблема «Нарушение ограничения целостности» с первичным ключом - PullRequest
2 голосов
/ 06 августа 2010

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

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

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

Моя схема для удостоверения личности:

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

1 Ответ

0 голосов
/ 18 февраля 2011

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

...