【问题标题】:Doctrine persist:坚持教义:
【发布时间】:2016-12-05 14:08:45
【问题描述】:

我是 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()
        ));
    }
}

实体Voiture

<?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;
    }
}

错误:

使用参数 ["2313", "2012-12-03 02:02:00" 执行 'INSERT INTO Voiture (serie, date_mise_circulation, marque, id) VALUES (?, ?, ?, ?)' 时发生异常", "sd", 1]:

SQLSTATE[23000]:违反完整性约束:1062 键“PRIMARY”的重复条目“1”

PS : 我有 id = "1" 的值,它应该自动增加 id。

[编辑]:类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';
    }
}

【问题讨论】:

  • 在您的VoitureType 中,是否有字段id
  • 我用命令生成的,我会在这里粘贴 1 分钟
  • 它假设一个自动生成我认为我不需要把它放在 voitureType
  • 数据库中是否有当前架构?也许您的字段 id 在 SQL 模式中没有 primary key?尝试运行php bin/console doctrine:schema:update --force
  • [Doctrine\DBAL\Exception\DriverException] 执行“ALTER TABLE modele CHANGE id id INT AUTO_INCREMENT NOT NULL”时发生异常:SQLSTATE[HY000]:一般错误:1833 无法更改列“id” :用于表'parc.voiture'的外键约束'FK_265FB893BF3967 50'

标签: mysql symfony add


【解决方案1】:

您的数据库中有旧架构,MySQL 不知道属性id 是自动递增值。要更新您的架构,您可以使用以下方法之一:

  1. Doctrine 的内部工具:php bin/console doctrine:schema:update --force
  2. 使用DoctrineMigrationsBundle

请记住,有时架构不想因为外键而更新。解决方案就是删除现有数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多