Php symfony2唯一验证程序无法更新行
我创建了一个具有唯一变量的实体。我将ORM设置为unique,并在验证器中进行设置。这允许我创建具有唯一名称的新行,但不允许我更新现有行,即使我只是指定更新它 validation.yml:Php symfony2唯一验证程序无法更新行,php,symfony,doctrine-orm,yaml,Php,Symfony,Doctrine Orm,Yaml,我创建了一个具有唯一变量的实体。我将ORM设置为unique,并在验证器中进行设置。这允许我创建具有唯一名称的新行,但不允许我更新现有行,即使我只是指定更新它 validation.yml: # src/Battlemamono/DatabaseBundle/Resources/config/validation.yml Battlemamono\DatabaseBundle\Entity\Mamono: constraints: - Symfony\Bridge\Do
# src/Battlemamono/DatabaseBundle/Resources/config/validation.yml
Battlemamono\DatabaseBundle\Entity\Mamono:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: name
message: A mamono with this name already exists.
properties:
id:
- Type:
type: integer
name:
- NotBlank: ~
- MaxLength: 30
- Type:
type: string
family1:
- NotBlank: ~
- MaxLength: 30
- Type:
type: string
- Choice : { callback: getFamily }
family2:
- MaxLength: 30
- Type:
type: string
- Choice : { callback: getFamily }
element1:
- NotBlank: ~
- MaxLength: 30
- Type:
type: string
- Choice : { callback: getElements }
element2:
- MaxLength: 30
- Type:
type: string
- Choice : { callback: getElements }
disposition:
- NotBlank: ~
- MaxLength: 100
- Type:
type: string
diet:
- NotBlank: ~
- MaxLength: 100
- Type:
type: string
previousForm:
- MaxLength: 30
- Type:
type: string
nextForm:
- MaxLength: 30
- Type:
type: string
evolution:
- MaxLength: 30
- Type:
type: string
evolutionLove:
- Type:
type: bool
tags:
- Type:
type: string
- MaxLength: 100
description:
- Type:
type: string
- NotBlank: ~
执行此操作的操作:
public function editProccessAction($id, Request $request)
{
$form = $this->createForm(new MamonoType());
if ($request->isMethod('POST'))
{
$form->bind($request);
if ($form->isValid())
{
$FormData = $form->getData();
$em = $this->getDoctrine()->getManager();
$mamono = $em->getRepository('BattlemamonoDatabaseBundle:Mamono')->find($id);
if (!$mamono) {
$this->get('session')->getFlashBag()->add('notice', 'There is no such mamono in the database. Create it instead!');
return $this->redirect($this->generateUrl('battlemamono_database_create'));
}
$mamono->setName($FormData->getName());
$mamono->setFamily1($FormData->getFamily1());
$mamono->setFamily2($FormData->getFamily2());
$mamono->setElement1($FormData->getElement1());
$mamono->setElement2($FormData->getElement2());
$mamono->setDisposition($FormData->getDisposition());
$mamono->setDiet($FormData->getDiet());
$mamono->setPreviousForm($FormData->getPreviousForm());
$mamono->setNextForm($FormData->getNextForm());
$mamono->setEvolution($FormData->getEvolution());
$mamono->setEvolutionLove($FormData->getEvolutionLove());
$mamono->setTags($FormData->getTags());
$mamono->setDescription($FormData->getDescription());
$mamono->setUpdatedBy();
$em->flush();
$this->get('session')->getFlashBag()->add('notice', 'the Mamono was updated.');
return $this->redirect($this->generateUrl('battlemamono_database_homepage'));
}
else
{
return new Response($form->getErrorsAsString());
}
}
}
您实际上并没有保存您的实体:
//...
$mamono->save();
$em->flush();
即使这样,还是会犯同样的错误。此外,该函数未写入“the Book”…名称:错误:具有此名称的mamono已存在。家族1:无错误家族2:无错误元素1:无错误元素2:无错误处置:无错误饮食:无错误前一种形式:无错误下一种形式:无错误演变:无错误演变爱:无错误标签:无错误描述:无错误确定发生这种情况的原因是您使用了在
名称
列中查找值。第一次保存特定Mamono时,名称不存在,并且保存成功。但是第二次,这个名字已经存在了,因为它以前被保存过。我敢打赌,如果修改实体对象中的名称
字段,在保存之前,它将保存而不会出错。不幸的是,我不知道解决方案,因为我不知道这个验证器,但希望这能让你走上正轨。不幸的是,我也注意到了这一点,我没有找到任何解决方案,这就是为什么我问这个问题的原因……现在我只是把它取出来。这就是验证小组的所在。您需要一个组用于创建,一个组用于编辑。编辑组将不具有唯一约束。