有一个包含许多列的表以及具有自动递增属性的主键列“id”。 数据库是mySQL。
该列中插入了两种 PHP 代码。 1.) 普通插入查询创建为字符串,并通过与数据库建立 ADO 连接来执行。在这种情况下,未提供主键值,因此它使用表的自动增量值。
2.) 有一个 php symfony doctrine 的实体类,其主字段声明为
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
*/
private $id;
插入使用实体管理器的持久化方法。 此处在插入时,显式提供了 id 值,该值远大于列的自动递增值。这就是注释中省略了 Generation_Type 的原因。
现在,假设当前的 auto_increment 值为 10000。 我希望在执行第一个场景时,下一个 id 被视为预期的 1001。 但是如果使用显式 id = 2000 执行第二个场景,它会插入带有 2000 的记录但不会将 auto_increment 更改为 2000。它应该仍然保持为 1001。
我必须围绕这段代码进行更改吗?
$this->em->persist(obj);
提前致谢。
最佳答案
如果你不需要你的 Doctrine 实体使用 AUTO
策略来设置 Id 值,你应该可以简单地使用 NONE
策略
/**
* @ORM\Column(type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
可在此处找到有关可用策略的更多信息:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/basic-mapping.html#identifier-generation-strategies
如果您需要您的实体在正常工作流程中具有自动增量策略,您可以将其设置为 AUTO
并在需要的时候通过以下方式禁用它:
$metadata = $entityManager->getClassMetadata(get_class($entity));
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$em->persist($entity);
$em->flush();
一般免责声明:谨慎行事!
关于php - 学说 : Explicitly giving primary key value while not changing the auto increment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410923/