gpt4 book ai didi

doctrine - 使用 "AUTO"策略时使用 Doctrine 显式设置 Id

转载 作者:行者123 更新时间:2023-12-03 04:56:55 25 4
gpt4 key购买 nike

我的实体使用此注释作为其 ID:

/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;

我从一个干净的数据库中导入旧数据库中的现有记录并尝试保留相同的 ID。然后,当添加新记录时,我希望 MySQL 像往常一样自动递增 ID 列。

不幸的是,Doctrine2 似乎完全忽略了指定的 ID。

<小时/>

新解决方案

根据下面的建议,以下是首选解决方案:

$this->em->persist($entity);

$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator());

旧解决方案

由于 Doctrine 依赖于 ClassMetaData 来确定生成器策略,因此在管理 EntityManager 中的实体后必须对其进行修改:

$this->em->persist($entity);

$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);

$this->em->flush();

我刚刚在 MySQL 上测试了它,它按预期工作,这意味着具有自定义 ID 的实体使用该 ID 存储,而没有指定 ID 的实体则使用 lastGeneratedId() + 1 .

最佳答案

虽然你的解决方案可以很好地与 MySQL 配合使用,但我未能使其与 PostgreSQL 配合使用,因为它是基于序列的。

我必须添加这一行以使其完美工作:

$metadata->setIdGenerator(new\Doctrine\ORM\Id\AssignedGenerator());

关于doctrine - 使用 "AUTO"策略时使用 Doctrine 显式设置 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com