在学说中坚持具有两个外国身份的对象

2024-03-13

我在我的 symfony 包中的 Resources/config/doctrine 文件夹中使用 yml-syntax 创建了一个实体:

Sulu\Bundle\TranslateBundle\Entity\Translation:
type: entity
table: tr_translations
id:
    code:
        type: string
        column: idCodes
        associationKey: id
    catalogue:
        type: string
        column: idCatalogues
        associationKey: id
fields:
    value:
        type: text
manyToOne:
    code:
        targetEntity: Code
        inversedBy: tr_codes
        joinColumn:
            name: idCodes
            referencedColumnName: id
    catalogue:
        targetEntity: Catalogue
        inversedBy: tr_catalogues
        joinColumn:
            name: idCatalogues
            referencedColumnName: id

这部分工作正常。但是,当我创建一些对象(如下面的代码所示)时,我收到一条错误消息,提示我必须使用刷新方法才能获取外键的 ID。

这是我当前正在使用的代码片段:

    // create a new package and catalogue for the import
    $package = new Package();
    $package->setName($this->getName());
    $catalogue = new Catalogue();
    $catalogue->setLocale($this->getLocale());
    $catalogue->setPackage($package);

    $this->em->persist($package);
    $this->em->persist($catalogue);

    // load the file, and create a new code/translation combination for every message
    $fileCatalogue = $loader->load($this->getFile(), $this->getLocale());
    foreach ($fileCatalogue->all()['messages'] as $key => $message) {
        $code = new Code();
        $code->setPackage($package);
        $code->setCode($key);
        $code->setBackend(true);
        $code->setFrontend(true);

        $translate = new Translation();
        $translate->setCode($code);
        $translate->setValue($message);
        $translate->setCatalogue($catalogue);

        $this->em->persist($code);
        $this->em->flush(); //FIXME no flush in between, if possible
        $this->em->persist($translate);
    }

    // save all the changes to the database
    $this->em->flush();

如果我不在 foreach 循环中调用刷新,我会收到以下错误,我完全理解这个错误,但是对于这个问题没有更优雅的解决方案吗?

Doctrine\ORM\ORMException :类型的实体 Sulu\Bundle\TranslateBundle\Entity\Translation 通过 外部实体 Sulu\Bundle\TranslateBundle\Entity\Code,但是这个 实体本身没有身份。你必须打电话 EntityManager#persist() 在相​​关实体上并确保 标识符是在尝试持久化之前生成的 'Sulu\Bundle\TranslateBundle\Entity\Translation'。邮寄的情况下 插入ID生成(例如MySQL自动增量或PostgreSQL SERIAL)这意味着您必须在两者之间调用 EntityManager#flush() 坚持经营。


不幸的是,根据教义文档 http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html#persisting-entities你必须调用flush来获取你的外键的ID:

生成的实体标识符/主键保证是 在下一次成功的刷新操作之后可用 有问题的实体。您不能依赖生成的标识符 调用 persist 后可直接使用。反之亦然。 您不能依赖生成的标识符在 刷新操作失败。

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

在学说中坚持具有两个外国身份的对象 的相关文章

随机推荐

  • 从命令行查找目录中的文件

    在 eclipse 和 textmate 等编辑器 IDE 中 有一些快捷方式可以快速查找项目目录中的特定文件 是否有类似的工具可以在 bash 或其他 shell 中 递归地 对目录中的文件名进行完整路径补全 我的项目有很多目录 而且还有
  • 如何在java中对用户输入进行单元测试

    我试图了解如何测试用户的输入 请注意 我不是在尝试进行模拟测试 而是对实际用户输入的测试 目前 正如您在我的程序中看到的那样 我已经对测试用例的值进行了硬编码 并且它通过了所有测试 但是我如何获取用户的输入并对其进行测试 有没有一种方法可以
  • 如何从另一个模型引用 Django 模型

    我希望在管理面板中为一个测试程序创建一个视图 该程序记录书籍 出版商和作者 如 djangoproject com 我定义了以下两个模型 class Author models Model first name models CharFie
  • Applescript 和 iCal 交互

    我正在尝试编写一个 AppleScript 来查询 iCal 并查找任何日历中给定日期的所有事件 我首先编写一个简单的脚本 对给定日历中的每个事件执行一些简单的操作 tell application iCal tell calendar R
  • 在 React 中加载时隐藏移动浏览器的地址栏(IOS / Android)

    Safari and Chrome移动设备上的页面加载时都包含可见的地址栏 当页面主体滚动时 URL 栏最小化 我的项目基于ReactJS 和我试图在页面加载时实现这个结果 因此不需要用户交互 页面需要加载URL 栏最小化 我的网络应用程序
  • Bash:如何在 osx bash 中用新行替换字符串?

    我经常用谷歌搜索它 我只想要这一行 echo Replace
  • Google 地图 - 查找靠近我的路线的城市

    我想获得我所访问的所有城市的列表might在 A 点和 B 点之间经过 输入 A点为原点B点为目的地 Output A点和B点之间的路线 这是显而易见的 AND距离我的路线较近 X 英里的城市 城镇 地点的列表 我想向用户提供一个需要考虑的
  • RecordRTC:Ondataavailable 被调用两次。只有第一个文件正确,其他文件已损坏或太小[重复]

    这个问题在这里已经有答案了 我想以2秒的间隔记录本地和远程流并用Ajax上传到服务器 但问题是 ondataavailable 方法被调用了两次 因此同一个视频被上传到服务器两次 第一个视频可以正常播放 而其余视频要么已损坏 要么非常小 不
  • 包容还是排他? Intel Core IvyBridge 处理器中的 L1、L2 缓存

    我有 Intel Core IvyBridge 处理器 Intel R Core TM i7 3770 CPU 3 40GHz L1 32KB L2 256KB L3 8MB 我知道L3是包容性的 是多核共享的 我想了解有关我的系统的以下信
  • Google INVISIBLE reCaptcha + Bootstrap 验证器

    我有一张登记表引导验证器 http 1000hz github io bootstrap validator 我想在提交表单之前验证 google INVISIBLE reCaptcha 客户端 有一些exapmle https devel
  • 选择组合框时的事件

    我的问题是在 C WPF 的 ComboBox 中选择 ComboBoxItem 时如何执行操作 In 这个帖子 https stackoverflow com questions 22224172 wpf selectionchanged
  • 将整数四舍五入到另一个整数的最接近倍数

    我需要将整数舍入为另一个整数的最接近的倍数 100 的倍数情况下的结果示例 36 gt 0 99 gt 100 123 gt 100 164 gt 200 等等 我想出了下面的代码 它可以工作 但感觉 脏 int RoundToMultip
  • 配置错误:此配置部分不能在此路径上使用

    我在将站点部署到服务器时遇到错误 当尝试在 IIS 中加载主页或访问新站点上的身份验证时 出现错误 配置错误 此配置部分不能在此路径中使用 当该部分被锁定在父级别时 就会发生这种情况 锁定是 默认情况下 overrideModeDefaul
  • 如何获取 web2py 中的当前 url?

    在web2py中如何获取当前页面的完整url 我想要出现在浏览器地址栏中的 可能是重写的 url e g 生成它的最简单的方法可能是 URL args request args vars request get vars host True
  • 有没有办法在 Spock 中进行模拟参数捕获

    我环顾四周并尝试了不同的方法但无济于事 互联网上的例子很少 而且恕我直言 非常简单 我的用例 下面的 itocNetworkHandler 是模拟的 when we re doing stuff StandardResponse respo
  • 是否存在“java 标准”?

    我用 Java 编程已经有大约 4 年了 但我学到的东西都是自学的 我从未参加过该语言的正式课程 最近 我在工作中听到两个人在争论 99 的专业 Java 开发人员都使用的 编程 Java 标准 我在用 java 编写代码时从未听说过也没有
  • 单击按钮时为 gridview 中的所有复选框获取 gridview 项目中的复选框状态

    我有下面的代码 现在我需要跟踪每个 gridview 项目中的复选框状态 并通过单击按钮获取该信息以更新信息 我的按钮事件在网格视图的图像适配器的调用活动中 public View getView int position View con
  • 在 Rails 中添加索引具有多通关系

    考虑到以下关系 class Style lt ActiveRecord Base has many stylefeatures dependent gt destroy has many features through gt stylef
  • 在列表理解中一次添加两个项目[重复]

    这个问题在这里已经有答案了 我想一次将两个项目添加到列表理解中 一项是不变的 如何仅使用列表理解中的一个 for 循环而不使用其他函数来实现这一目标 不使用任何导入的答案将受到青睐 看看以下内容 gt gt gt mystring ABCE
  • 在学说中坚持具有两个外国身份的对象

    我在我的 symfony 包中的 Resources config doctrine 文件夹中使用 yml syntax 创建了一个实体 Sulu Bundle TranslateBundle Entity Translation type