Symfony不会自动增加id

时间:2017-12-05 16:40:03

标签: php mysql symfony

我有一个名为cardb的数据库,它由一个生成一些汽车的SQL文件填充。它们的ID从1到30开始。当我尝试创建新的Car时,它首次运行并创建一个id为0的汽车,然后当它再次尝试再次执行时它再次尝试使用0进行输入。

这是错误

  

使用params [“fock”,“fock”,320]执行'INSERT INTO cars(Make,Model,TravelledDistance)VALUES(?,?,?)'时发生异常:

     

SQLSTATE [23000]:完整性约束违规:1062键'PRIMARY'重复输入'0'

这是我的实体

    /**
 * Cars
 *
 * @ORM\Table(name="cars")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CarsRepository")
 */
class Cars
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="Make", type="string", length=255)
     */
    private $make;

    /**
     * @var string
     *
     * @ORM\Column(name="Model", type="string", length=255)
     */
    private $model;

    /**
     * @var int
     *
     * @ORM\Column(name="TravelledDistance", type="bigint")
     */
    private $travelledDistance;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Parts", inversedBy="cars")
     * @ORM\JoinTable(
     *  name="PartCars",
     *  joinColumns={
     *      @ORM\JoinColumn(name="Part_Id", referencedColumnName="id")
     *  },
     *  inverseJoinColumns={
     *      @ORM\JoinColumn(name="Car_Id", referencedColumnName="id")
     *  })
     */
    private $parts;
    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set make
     *
     * @param string $make
     *
     * @return Cars
     */
    public function setMake($make)
    {
        $this->make = $make;

        return $this;
    }

    /**
     * Get make
     *
     * @return string
     */
    public function getMake()
    {
        return $this->make;
    }

    /**
     * Set model
     *
     * @param string $model
     *
     * @return Cars
     */
    public function setModel($model)
    {
        $this->model = $model;

        return $this;
    }

    /**
     * Get model
     *
     * @return string
     */
    public function getModel()
    {
        return $this->model;
    }

    /**
     * Set travelledDistance
     *
     * @param integer $travelledDistance
     *
     * @return Cars
     */
    public function setTravelledDistance($travelledDistance)
    {
        $this->travelledDistance = $travelledDistance;

        return $this;
    }

    /**
     * Get travelledDistance
     *
     * @return int
     */
    public function getTravelledDistance()
    {
        return $this->travelledDistance;
    }

    /**
     * @return mixed
     */
    public function getParts()
    {
        return $this->parts;
    }

}

它是自动生成的实体,具有自动增量注释。

可能是什么问题?

1 个答案:

答案 0 :(得分:4)

注释

 * @ORM\GeneratedValue(strategy="AUTO")

不会让PHP创建一个唯一的ID。您可以从insert语句中看到PHP根本没有提供ID值。

该注释告诉ORM它是什么类型的列,但它依赖于数据库来生成值。 You can check the documentation for more details.

根据您的代码看起来的方式,它显示为used the console to generate the entity,但我认为数据库没有正确执行id这一事实意味着您手动创建了cars表而不是使用doctrine:schema:update,如果你需要/想要这样做的话,这很好,但是你必须改变你的表以使id列成为一个自动增量。