我有一个名为 cardb
的数据库,它由一个制造了一些汽车的 SQL 文件填充。它们的 ID 从 1 到 30 不等。当我尝试创建新汽车时,它第一次工作并创建了一辆 ID 为 0 的汽车,然后当它再次尝试时,它再次尝试使用 0 进行输入。
这里是错误
An exception occurred while executing 'INSERT INTO cars (Make, Model, TravelledDistance) VALUES (?, ?, ?)' with params ["fock", "fock", 320]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'
这是我的实体
/**
* 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;
}
}
它是自动生成的实体,具有自动增量注释。
可能是什么问题?
最佳答案
注解
* @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 列成为自动增量。
关于php - Symfony 不会自动增加 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658501/