【问题标题】:Symfony doesnt auto increment idSymfony 不会自动增加 id
【发布时间】:2017-12-05 16:40:03
【问题描述】:

我有一个名为cardb 的数据库,它由一个制造一些汽车的SQL 文件填充。他们的 ID 从 1 到 30。当我尝试创建新 Car 时,它第一次工作并创建了一个 id 为 0 的汽车,然后当它再次尝试这样做时,它再次尝试使用 0 进行条目。

这是错误

使用参数 ["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;
    }

}

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

可能是什么问题?

【问题讨论】:

  • 检查表 cars 列 id 是否确实是使用 AUTO_INCREMENT 选项生成的...SHOW CREATE TABLE cars

标签: php mysql symfony


【解决方案1】:

注释

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

不会让 PHP 创建一个唯一的 ID。从插入语句可以看出,PHP 根本不提供 ID 值。

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

根据您的代码的外观,您似乎是used the console to generate the entity,但我认为数据库未正确执行 id 的事实意味着您手动创建了 cars 表而不是使用 doctrine:schema:update ,如果这是您需要/想要这样做的方式,那很好,但您必须更改您的表以使 id 列成为自动增量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2015-03-19
    • 2011-04-26
    • 2010-12-09
    相关资源
    最近更新 更多