教义坚持:
Doctrine persist:
我是 Symfony 的初学者。我的问题是我尝试向我的基础 MySQL 添加值,问题是我有相同的 ID,但我验证了我的实体并生成了值 @ORM/GeneratedValues
,我不明白在哪里我的错。
路由:
esprit_parc_AjoutVoiture:
path: /Ajout_voiture/
defaults: { _controller: ParcBundle:Voiture:add }
我的控制器:
public function addAction (Request $Request)
{
$Voiture = new Voiture();
$form = $this->createForm(VoitureType::class,$Voiture);
$form->handleRequest($Request);
if ($form->isValid())
{
$em=$this->getDoctrine()->getManager();
$em->persist($Voiture);
$em->flush();
return $this->redirect($this->generateUrl(
'esprit_parc_Affichage'
));
}
return $this->render(
'ParcBundle:Voiture:ajout.html.twig',
array('form'=>$form->createView()
));
}
}
实体实体:
<?php
namespace ParcBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Class voiture
* @package ParcBundle\Entity
* @ORM\Entity
* @ORM\Table(name="Voiture")
*/
class Voiture
{
/**
* @ORM\Column( type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
private $id;
/**
* @ORM\Column(type="string",length=255)
*
*/
private $Serie;
/**
* @ORM\Column(type="datetime",length=255)
*/
private $DateMiseCirculation;
/**
* @ORM\Column(type="string",length=255)
*/
private $Marque;
/**
* @ORM\ManyToOne(targetEntity="ParcBundle\Entity\Modele" )
* @ORM\JoinColumn(name="id", referencedColumnName="id");
*/
private $modele;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getModele()
{
return $this->modele;
}
public function setModele($modele)
{
$this->modele = $modele;
}
public function getSerie()
{
return $this->Serie;
}
public function setSerie($Serie)
{
$this->Serie = $Serie;
}
public function getDateMiseCirculation()
{
return $this->DateMiseCirculation;
}
public function setDateMiseCirculation($DateMiseCirculation)
{
$this->DateMiseCirculation = $DateMiseCirculation;
}
public function getMarque()
{
return $this->Marque;
}
public function setMarque($Marque)
{
$this->Marque = $Marque;
}
}
错误:
An exception occurred while executing 'INSERT INTO Voiture (serie, date_mise_circulation, marque, id) VALUES (?, ?, ?, ?)' with params ["2313", "2012-12-03 02:02:00", "sd", 1]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'
PS :我有 id = "1"
的值,它应该自动增加 id。
[编辑]:Class VoitureType
:
<?php
namespace ParcBundle\Form;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class VoitureType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('Serie')
->add('DateMiseCirculation')
->add('Marque')
->add('modele', EntityType::class, array(
"class" => "ParcBundle:Modele",
"choice_label"=> "libelle"
))
->add("Ajouter",SubmitType::class);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ParcBundle\Entity\Voiture'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'parcbundle_voiture';
}
}
您的数据库中有一个旧模式,并且 MySQL 不知道属性 id
是自动增量值。要更新您的架构,您可以使用以下方法之一:
- Doctrine 的内部工具:
php bin/console doctrine:schema:update --force
。
- 使用DoctrineMigrationsBundle.
请记住,有时架构不想因为外键而更新。解决方案是删除现有数据。
我是 Symfony 的初学者。我的问题是我尝试向我的基础 MySQL 添加值,问题是我有相同的 ID,但我验证了我的实体并生成了值 @ORM/GeneratedValues
,我不明白在哪里我的错。
路由:
esprit_parc_AjoutVoiture:
path: /Ajout_voiture/
defaults: { _controller: ParcBundle:Voiture:add }
我的控制器:
public function addAction (Request $Request)
{
$Voiture = new Voiture();
$form = $this->createForm(VoitureType::class,$Voiture);
$form->handleRequest($Request);
if ($form->isValid())
{
$em=$this->getDoctrine()->getManager();
$em->persist($Voiture);
$em->flush();
return $this->redirect($this->generateUrl(
'esprit_parc_Affichage'
));
}
return $this->render(
'ParcBundle:Voiture:ajout.html.twig',
array('form'=>$form->createView()
));
}
}
实体实体:
<?php
namespace ParcBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Class voiture
* @package ParcBundle\Entity
* @ORM\Entity
* @ORM\Table(name="Voiture")
*/
class Voiture
{
/**
* @ORM\Column( type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
private $id;
/**
* @ORM\Column(type="string",length=255)
*
*/
private $Serie;
/**
* @ORM\Column(type="datetime",length=255)
*/
private $DateMiseCirculation;
/**
* @ORM\Column(type="string",length=255)
*/
private $Marque;
/**
* @ORM\ManyToOne(targetEntity="ParcBundle\Entity\Modele" )
* @ORM\JoinColumn(name="id", referencedColumnName="id");
*/
private $modele;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getModele()
{
return $this->modele;
}
public function setModele($modele)
{
$this->modele = $modele;
}
public function getSerie()
{
return $this->Serie;
}
public function setSerie($Serie)
{
$this->Serie = $Serie;
}
public function getDateMiseCirculation()
{
return $this->DateMiseCirculation;
}
public function setDateMiseCirculation($DateMiseCirculation)
{
$this->DateMiseCirculation = $DateMiseCirculation;
}
public function getMarque()
{
return $this->Marque;
}
public function setMarque($Marque)
{
$this->Marque = $Marque;
}
}
错误:
An exception occurred while executing 'INSERT INTO Voiture (serie, date_mise_circulation, marque, id) VALUES (?, ?, ?, ?)' with params ["2313", "2012-12-03 02:02:00", "sd", 1]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'
PS :我有 id = "1"
的值,它应该自动增加 id。
[编辑]:Class VoitureType
:
<?php
namespace ParcBundle\Form;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class VoitureType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('Serie')
->add('DateMiseCirculation')
->add('Marque')
->add('modele', EntityType::class, array(
"class" => "ParcBundle:Modele",
"choice_label"=> "libelle"
))
->add("Ajouter",SubmitType::class);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ParcBundle\Entity\Voiture'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'parcbundle_voiture';
}
}
您的数据库中有一个旧模式,并且 MySQL 不知道属性 id
是自动增量值。要更新您的架构,您可以使用以下方法之一:
- Doctrine 的内部工具:
php bin/console doctrine:schema:update --force
。 - 使用DoctrineMigrationsBundle.
请记住,有时架构不想因为外键而更新。解决方案是删除现有数据。