2
Когда я хочу, чтобы создать новый объект с одним из моей формы, Doctrine взять меня ошибка: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);
Edit:
Я даю вам, мои функции
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');
}
}
Хм ... ну нет ничего плохого в вашей базовой форме или определении вашей схемы. Похоже, вы отключаете идентификатор существующей записи и пытаетесь ее сохранить или что-то еще ... Как вы создаете/изменяете объект формы перед сохранением? –
Я добавляю методы для сохранения объекта. Я нашел, где ошибка, но я не понимаю, как я могу ее удалить. Проблема заключается в моих тестах, чтобы узнать, создаю ли я объект или обновляю ли я. Как я могу узнать это? потому что ошибка исходит из $ form-> getObject-> isNew(). – Elorfin