【发布时间】: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