
Question:
When I want to create a new object with one of my form, Doctrine take me an error :
Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'
Creating worked previously, but I don't know what I have change to have an error now.
My schema for ID :
Logement: connection: doctrine actAs: [Timestampable] tableName: logement columns: id: type: integer(2) unsigned: true primary: true autoincrement: true
In my forms : 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 :
I give you, my functions
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'); } }
Solution:1
Your type is integer(2), that's mean you only can have 100 elements in your table. I guess that in element 101, the db engine try to write 0 as id.
Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
EmoticonEmoticon