使用“AUTO”策略时使用 Doctrine 显式设置 Id

2024-01-16

我的实体使用此注释作为其 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());

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“AUTO”策略时使用 Doctrine 显式设置 Id 的相关文章

随机推荐

  • Ubuntu:无法纠正问题,您持有损坏的软件包

    尝试安装此程序时 我收到 无法纠正问题 您持有损坏的软件包 错误消息 阿帕奇版本 服务器版本 Apache 2 4 2 Ubuntu 服务器建成 2012 年 6 月 27 日 07 23 35 aptitude install libap
  • while(true) 与 setInterval(function(),0) [重复]

    这个问题在这里已经有答案了 设置间隔 重复调用函数或执行代码片段 每次调用该函数之间有固定的时间延迟 while 创建一个循环 只要测试条件的计算结果为 true 该循环就会执行指定的语句 之前评估过条件 执行该语句 如果我使用while
  • 公共属性的默认值

    我在某个班级有一个公共财产 我想要这个属性的默认值 1 而不需要像 MyField这样的私有变量 因为这个类中的属性太多 我不会一一添加它们 public int MyProperty get set 我认为 DefaultValue At
  • 在unittest中覆盖python函数局部变量

    我在 python 2 7 中有一个方法可以执行 foo 操作 如果 foo 不起作用 则在 5 分钟后放弃 def keep trying self timeout 300 empirically derived appropriate
  • GoogleFit 示例不起作用

    我正在尝试使用 BasicHistory Sample 来存储数据 然后读取它 但在我的情况下 代码卡在插入调用中 await 调用不会返回我尝试使用异步方式的任何内容 这里是代码 com google android gms common
  • 在哪里可以找到 Microsoft SQL Server 2008 的 Northwind 数据库?

    我正在尝试查找并创建 导入 Northwind 数据库来练习我的 Linq fu 我一生都找不到它 搜索只是将我转到此页面 这反过来又告诉我在不存在的官方页面上找到它 http msdn microsoft com en us librar
  • 数据绑定在表单加载之前不起作用 - 组合框项仅在表单加载后初始化

    我在 winform 上有两个组合框 一个包含列表 MyList 中的所有值 另一个我想拥有第一个选定索引中的所有值 但我认为将项目加载到组合框中时存在问题 public partial class Form1 Form public Fo
  • 在 Chrome 中禁用表单自动填充而不禁用自动完成[重复]

    这个问题在这里已经有答案了 我们如何禁用 Chrome 的自动填充功能
  • 如何在 Internet Explorer 中创建跨域 XMLHTTPRequest

    我的代码如下所示 推荐在 IE 下运行 但仅在 Chrome 和 FF 下运行 是否有正确的方法从另一个域访问 url 此外 该域是我拥有的域 可以允许访问尝试访问它的脚本
  • 如何检测 Topshelf 是否在控制台模式下运行

    我将 Topshelf 与 FluentSchedule 结合用于 Windows 服务 但是 我希望能够试运行应用程序以简单地启动而不是执行设置计时器等的 FluentSchedule 代码 从命令行运行 exe 文件 即没有 安装 命令
  • 在 PHP 中打印多维数组的单个值

    我正在使用以下数组 Array 0 gt Array id gt 6 key gt SITE NAME value gt Webg Smarty CMS Small name gt general title gt website name
  • ConstraintLayout - 如何垂直对齐两个视图的中心

    我有两个视图 A 和 B 它们有不同的高度 如何在内部垂直对齐这些视图的中心ConstraintLayout 例如 在下面的 XML 中 我想要中心img change picture与中心对齐txt change picture
  • 在用户空间处理 GPIO ARM9 嵌入式 Linux AM1808

    我必须将我的 GSM 模块与基于 ARM9 的 AM1808 连接起来 我已将所有 GPIO 引脚分配给 Da850 c 以及 mux h 文件 我成功创建了一个 uImage 并将该图像插入到我的 Flash 中 我需要处理用户应用程序中
  • 如何从 PDF 文档中提取表格?

    我正在尝试从 PDF 文档中提取表格 example http www nea org np images supportive docs 55082070 3 19 pdf 它不是扫描 图像 因此请关注非 OCR 解决方案 OCR表格提取
  • 创建样式节点、添加innerHTML、添加到DOM、以及IE令人头疼的问题

    我有一个由两部分组成的问题 一 场景 由于我们在移动浏览器对 NOSCRIPT 的支持方面遇到了一些奇怪的问题 我的任务是提出一种替代解决方案来 检测 JS 解决方案逻辑是页面上有两个 DIV 一种是错误提示你没有 JS 并且默认显示他 如
  • Virtualenv 说“root”而不是 virtualenv 的名称?

    一段时间以来 我一直在许多 python 项目中使用 virtualenv 当我尝试激活我的 virtualenv 之一时 我输入 source venv bin activate 这通常可以达到目的 但是 我的命令提示符不是这样说的 ve
  • 无法运行 ipad 应用程序 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要一些帮助 我从 App Store 免费 下载了一个 ipad 应用程序 现在我想在任何模拟器上运行该应用程序 我尝试了很多模拟器 但都失败了
  • 获取 MP4 流长度

    我正在一个应用程序中工作 我们使用 IMediaDet 来获取流长度 现在我们开始使用 MP4 容器 问题是 当我尝试使用 MP4 文件使用 IMediaDet put fileName 时 我得到 HRESULT 2147024770 E
  • 如何从 openlibrary api 解析 Json 数据? (适当地)

    如果这个问题已经得到解答 请原谅我 我看到了有关 json 数据和 openlibrary 的各种答案 到目前为止 我从 openlibrary 获取的 json 数据和我在示例中看到的 json 数据似乎格式不同 我的问题是 使用 php
  • 使用“AUTO”策略时使用 Doctrine 显式设置 Id

    我的实体使用此注释作为其 ID orm Id orm Column type integer orm GeneratedValue strategy AUTO protected id 我从一个干净的数据库导入旧数据库中的现有记录并尝试保留