拥有方的主键作为连接列

2024-03-13

NOTE: 主题很长但很详细,如果您使用 Doctrine2 和 oneToOne 关系,可能会派上用场。

最近在Doctrine中遇到一个问题:

我创建了具有 oneToOne 双向关系的 User 和 UserData 对象:

User:
...
  oneToOne:
    userdata:
      targetEntity: UserData
      mappedBy: user

UserData:
...
  oneToOne:
    user:
      targetEntity: User
      inversedBy: userdata

所以 UserData 是拥有 user_id 列的一方:

user: id, ...
userdata: id, user_id, ...

这就产生了一个问题,每次获取 User 对象(单个用户、用户集合或用户加入的其他对象集合)时,Doctrine 都会为每个 User 延迟加载 UserObject。

此处描述的问题:

  • 如何防止 Doctrine 延迟加载一对一关系? https://stackoverflow.com/questions/9735930/how-to-prevent-doctrine-from-lazy-loading-one-to-one-relationsip
  • http://groups.google.com/group/doctrine-user/browse_thread/thread/7e421a2b189f0ea7 http://groups.google.com/group/doctrine-user/browse_thread/thread/7e421a2b189f0ea7
  • https://github.com/doctrine/doctrine2/issues/4389 https://github.com/doctrine/doctrine2/issues/4389

此处描述的建议解决方案:

  • https://github.com/doctrine/doctrine2/issues/2364 https://github.com/doctrine/doctrine2/issues/2364

所以有3种方法可以解决这个问题:

  1. 等待并看看提议的解决方案是否在 Doctrine 中得到解决并在未来版本中修复(可能不会发生)
  2. 在每个查询中手动将 UserData 保留到 User (仍然浪费资源,不需要 UserData)
  3. 切换相反方并使用户成为拥有方。

我决定选择#3。所以我的模式关系现在看起来像这样:

User:
...
  oneToOne:
    userdata:
      targetEntity: UserData
      inversedBy: user

UserData:
...
  oneToOne:
    user:
      targetEntity: User
      mappedBy: userdata

这意味着我的表格现在看起来像这样:

user: id, userdata_id, ...
userdata: id, ...

我决定手动设置 Userdata.id 并将其与 user.id 匹配,而不是自动递增。这意味着 UserData.id 将始终与 user.id 匹配。

Question我可以使用 user.id (主要自动增量键)作为 joinColum 而不是 userdata id 因为它们始终具有相同的值吗?您认为这种做事方式有任何潜在的问题吗?

关于此问题的任何其他提示或意见都非常受欢迎和赞赏。


您还可以强制部分对象,以摆脱延迟加载:

use Doctrine\ORM\Query;

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

拥有方的主键作为连接列 的相关文章

  • Symfony 2:添加自定义表单元素,而不是在实体中

    我与 Symfony2 合作 我想创建一个注册表 我不想使用 FOSUserBundle 因此 我创建一个实体帐户 包含字段 用户名 密码 电子邮件 并创建表单 account new Account form this gt create
  • Doctrine2 多对一双向关系不起作用

    我正在尝试在两个实体之间进行双向关联 问题是 从 Book 我可以得到它们的所有者 但从 Owner 我无法得到拥有的书籍 这是代码的重要部分 Acme BookBundle Entity Book ORM ManyToOne target
  • 使 Chrome 即使在 500 或 404 代码上也能显示页面(表现得像 Firefox)

    我们正在 Symfony 中开发一个新网站 当 Symfony 遇到错误 例如 找不到路由 并且 debug 设置为 true 时 它 不仅会输出 404 代码 而且实际上会在页面上显示错误 Firefox 显示服务器返回的内容 但 Chr
  • Symfony2 - 访问被拒绝(用户未经过完全身份验证)

    我正在使用 Symfony2 开发一个网站 直到今天 登录没有问题 但现在登录时我没有正确验证 Symfony 分析器将我列为logged in as anon而不是我登录的用户 我还被重定向回登录页面而不是目标路径 登录过程由传统的登录表
  • 有没有办法从 Symfony 应用程序中的 url 中删除 '/web' 而不将 'web' 目录的内容移动到根目录?

    我在使用 Symfony 创建应用程序时遇到一个问题 即 url 中出现 web 我找到了一种方法来摆脱这个问题 将 web 目录的内容移动到根目录 但我认为这不是一个好的开发实践 必须有其他方法 谁能告诉我是否还有其他方法可以做到这一点
  • Symfony 从控制器设置块内容

    有没有办法在 Symfony 的控制器中设置模板块内容 有没有办法在控制器中执行类似的操作 this gt get templating gt setBlockContent page title page title 我需要动态设置页面标
  • 在学说监听器中插入元素

    我已经设置了一个学说监听器 它在不同的数据库操作上触发并创建一个日志实体并将其插入数据库 class FOO public function onFlush OnFlushEventArgs args foreach args gt get
  • Api-Platform:使用 PUT 创建资源

    我想使用 PUT 方法来创建资源 它们由 UUID 标识 并且由于可以在客户端创建 UUID 因此我想启用以下行为 在 PUT api myresource 4dc6efae 1edd 4f46 b2fe f00c968fd881 上 如果
  • 更新 Doctrine 后 Symfony 中的“ObjectManager 和 EntityManagerInterface 之间的兼容性”是什么?

    在我的 Symfony 项目中尝试更新 composer update 后出现错误 我寻找解决方案 发现有必要修改实体和构造函数中的使用和类型提示 我已经完成了 然后 我重新启动更新 但出现了不同的错误 并且更新未完全完成 结果 我的网站已
  • 让第 3 方在无需访问完整项目/源代码的情况下进行 Symfony 设计

    我正在开发 Symfony 2 WebApp WebApp已经上线大约两年了 现在我想更新一下设计 这项工作应该外包给第三方 当然 设计师需要访问所有样式 sass 文件 和模板 twig 文件 才能进行设计 我怎样才能做到这一点 而又不让
  • Doctrine2大合集

    在过去的几天里 我一直在玩doctrine2 ZF 设置 我仍然无法弄清楚的一件事是大型数组集合关联 例如 假设我们有一个名为 Post 的实体 每个帖子可以有很多评论 现在 如果我这样做 这将加载所有评论 post gt comments
  • Symfony 3.0 - 无法加载资源“。” - 自定义路线加载器

    我正在努力将我的一个项目升级到 SF 3 该项目使用了一些自定义路由加载器 这些加载器之前工作没有问题 现在我得到了FileLoaderLoadException指出resource 无法加载 我看了一下文档 http symfony co
  • 没有 OutputInterface 的 Symfony2 控制台输出

    我正在尝试使用 Symfony 控制台命令将一些信息打印到控制台 通常你会做这样的事情 protected function execute InputInterface input OutputInterface output name
  • 如何通过 SyliusResourceBundle 使用 Sylius 创建新模型

    我找到并成功使用了有关如何覆盖 Sylius 中现有模型的文档 但我无法利用 SyliusResourceBundle 创建一个全新的模型 我猜如果你已经了解 Symfony2 的话这很容易吗 我仍在学习 所以这就是我所拥有的 我缺少什么
  • 如何翻译 Sonata Admin Bundle 中的标签

    我正在使用 Symfony 2 3 和 Sonata Admin Bundle 我知道我可以用这种方式翻译标签 gt add shortDescription null array label gt shortDescriptionTran
  • Doctrine ORM 按注释对象字段排序

    所以它很简单 我在某个实体中有以下代码 var ServiceOffer ORM OneToMany targetEntity ServiceOffer mappedBy serviceProvider ORM OrderBy servic
  • 如何从symfony2中的现有表生成实体?

    我有带有一些字段的表 my table 我想在 MyBundle 中使用 my table 生成实体 但我不想重新创建 MyBundle 中的所有实体 我怎样才能做到这一点 这是你可以做到的方法 第一步 要求Doctrine自省数据库并生成
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • 从 Symfony2 中的服务重定向

    我有一项查找页面数据的服务 但如果找不到该数据 则应重定向到主页 对于我的一生 我不知道如何在 Sf2 中做到这一点 有很多不同的方法可以使用服务和路由器 但似乎都不起作用 namespace Acme SomeBundle Service
  • Doctrine 生成实体命名空间问题?

    好吧 我对原则有最后一个问题 生成 实体命令 我运行以下命令 并得到预期的文件 src MyNamespace Bundle MyNamespaceBundle Resources config doctrine metadata orm

随机推荐

  • ssh2节点js sftp协议错误握手失败

    你好 我有一个小问题 我开发了一个带有节点js的脚本sftp客户端 它连接到sftp服务器并抓取一些文件 我用本地服务器测试了它的工作 但是当我尝试将它与生产服务器一起使用时 我收到了这个错误 错误 握手失败 没有匹配的密钥交换算法 我已经
  • 无法联系到会员

    这是我用于显示角色成员的代码 但是 当我为有很多成员的角色调用此命令时 它只返回我的名字 我该如何修复它 V12 let role if message mentions roles first message guild roles ca
  • 使用升压条件变量

    我正在设计一个异步记录器类 如下所示 但是 不确定我是否以正确的方式使用升压条件变量 有人可以对此发表评论吗 这里的processLogEntry方法是一个线程函数 我在这里使用boost void LogWriter stopThread
  • 当我更新我的 sqlite 核心数据存储时,如何避免出现“SQL 执行期间错误:约束失败”?

    我们的应用程序允许用户从 API 提供的列表中选择位置 该列表很少更新 并且仅通过添加项目来更新 因此应用程序不会每次都访问 API 而是在 Core Data sqlite 存储中提供快照 我们希望它定期更新列表 执行此操作的代码如下所示
  • gcc 不匹配标签选项给出“无法识别的命令行选项”

    我试图激活该选项 Wmismatched tags在 gcc 上 检测不一致的类 结构声明 这可能在使用前向声明时发生 但在 Ubuntu 上我得到 c error unrecognized command line option Wmis
  • “替换”功能示例

    我没有找到该项目的帮助页面replace函数从base包很helpful 最糟糕的是 它没有可以帮助理解其工作原理的示例 您能解释一下如何使用它吗 举一两个例子就太好了 如果您查看该函数 通过在控制台中输入其名称 您会发现它只是一个简单的函
  • 我想仅为特定资源运行 terraform

    运行 terraform 并等待需要很长时间 所以我想运行它来排除执行时间最长的rds 或者我只想运行 ec2 资源 有没有办法在地形中做这样的事情 您可以使用 target resource https www terraform io
  • 为什么 DirectFB 没有在 GNU/Linux 中得到更广泛的应用?是否存在 X11 中不存在的严重限制?

    据我了解 DirectFB为多种显卡提供硬件加速 此外 它比 X11 更小 更快 并且占用的内存更少 那么 为什么它没有比现在更主流呢 我真正不确定的是 常见的 GTK Qt 程序是否需要移植到它 在 DirectFB 网站上 有一个将 F
  • 带有 JDBC 准备语句的字符串中的圆括号

    这是我的 Java JDBC 代码 例如修改和简化的 ps connection prepareStatement SELECT a b c FROM mytable WHERE category ps setString 1 my sup
  • C语言数据类型算术规则

    在 C 编程中 如果我在下面的等式中使用变量 k X Y n 其中 exp 是数学常数 e 提升到 pi 3 14159 j sqrt 1 并且这些变量都被声明为 64b 双精度浮点数 其中 X 是复数 输出的结果也将是这种数据类型 out
  • Angular 2 悬停事件

    在新的Angular2框架 有谁知道像事件一样进行悬停的正确方法吗 In Angular1有ng Mouseover 但这似乎并没有被延续下来 我浏览了文档但没有发现任何内容 如果你想在任何 HTML 元素上执行类似悬停的事件 那么你可以这
  • C# 查找解决方案中的所有测试

    我是否可以使用任何技术来查找解决方案中注释为测试的所有测试 TestMethod Fact Theory 语境 我对这一切都很陌生 但正在尝试制定持续部署策略 我想在发布过程期间 之后找到并运行解决方案中的所有测试 这些不是依赖于构建的单元
  • 有多少 WebGL 内存可用?当我用完时会发生什么?

    GPU 内存是有限的 通常比 JS 堆大小等更有限 诸如大量高分辨率图像之类的东西可能会填满内存 而且它是共享资源 因此其他应用程序可能会使用大量内存 在 OpenGL 中 我可以查询可用内存 WebGL 有没有办法做同样的事情 我怎样才能
  • 在回收器视图上创建上下文菜单时,menuInfo 为 null

    我试图在回收器视图中单击项目时显示上下文菜单 并选择呼叫姓名被单击的人 但我无法检索电话号码 因为 getMenuInfo 不起作用 因为我在 onCreateContextMenu 的 contextMenuInfo 中得到 null 我
  • 在 C++ 中打印星号“三角形”

    我想制作一个打印此类输出的通用代码 这意味着用户可以输入任何值 整体 for 5 and for 3 这是我做的 但它打印出直角三角形 任何帮助 提前致谢 include
  • 如何避免在我的应用程序启动时中断已在播放的音频?

    我有一个应用程序需要使用AVAudioSessionCategoryPlayback为了在设备锁定或我的应用程序在后台时播放声音 这是一个闹钟功能 所以我还需要在 UIBackgroundModes 列表中设置 音频 键 我已将以下代码放入
  • 将事件处理程序附加到代码生成的数据模板

    我有一个相关问题this one https stackoverflow com questions 59451 creating a silverlight datatemplate in code 我正在尝试将事件附加到我的 Stack
  • Playframework 和 Twitter 流 API

    如何从 Twitter Streaming API POST 状态 过滤器读取响应数据 我已建立连接并收到 200 状态代码 但我不知道如何阅读推文 我只想在推文出现时将其打印出来 ws url url sign OAuthCalculat
  • 僵尸进程的父进程终止后会发生什么?

    我只是好奇 如果僵尸进程的父进程不关心等待它 会发生什么 假设 我们有一个父母和一个孩子 子进程先于父进程终止 来自APUE 内核为每个终止进程保留少量信息 最少该信息包括进程 ID 进程的终止状态 家长需要使用以下方式获取此信息waitp
  • 拥有方的主键作为连接列

    NOTE 主题很长但很详细 如果您使用 Doctrine2 和 oneToOne 关系 可能会派上用场 最近在Doctrine中遇到一个问题 我创建了具有 oneToOne 双向关系的 User 和 UserData 对象 User one