原则 2 映射引用唯一键

2023-11-28

基本问题:

是否可以使用不引用主键而仅引用唯一键的 Doctrine 来映射关联?

扩大的视野:

我有一个实体(Participation) which may参考2个其他实体(DropoutCause and DischargeType)。根据此组合,隐含了一些其他属性,基于另一个(第四个)表(DropoutScenario)在数据库中。因为两个引用实体中的任何一个都可能为空,所以我无法将它们声明为主键,而只是第四个表中的唯一键。

问题是当我尝试用 Doctrine 映射它时,我只会收到错误:

主键 ID 缺少值 应用程序\实体\培训\DropoutScenario

我是否做错了什么,或者这对于 Doctrine 来说根本不可能? 如果没有,是否有更好的解决方案可以做到这一点?

我已经搜索了很长一段时间并挖掘了 Doctrine 文档,但我根本找不到任何相关内容......

我的映射的剥离代码示例如下。

参与:

<?php

namespace Application\Entity\Trainings;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperclass
 */
abstract class Participation {

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

    /**
     * @ORM\ManyToOne(targetEntity="Application\Entity\DropoutCause")
     * @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="id"))
     */
    protected $dropoutCause;

    /**
     * @ORM\ManyToOne(targetEntity="Application\Entity\DischargeType")
     * @ORM\JoinColumn(name="discharge_id", referencedColumnName="id"))
     */
    protected $dischargeType;

    /**
     * @ORM\ManyToOne(targetEntity="DropoutScenario")
     * @ORM\JoinColumns({
     * @ORM\JoinColumn(name="discharge_id", referencedColumnName="discharge_id"),
     * @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="dropout_cause_id")
     * })
     */
    private $scenario;

辍学场景:

<?php

namespace Application\Entity\Trainings;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="training_dropout_scenarios")
 */
class DropoutScenario {

    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Application\Entity\DropoutCause")
     * @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="id"))
     */
    protected $dropoutCause;

    /**
     * @ORM\ManyToOne(targetEntity="Application\Entity\DischargeType")
     * @ORM\JoinColumn(name="discharge_id", referencedColumnName="id"))
     */
    protected $dischargeType;

    /** @ORM\Column(type="integer", name="dropout_cause_id") */
    protected $dropoutCauseId;

    /** @ORM\Column(type="integer", name="discharge_id") */
    protected $dischargeTypeId;

由于我还没有得到任何答案,所以我今天做了另一项研究,并通过 Doctrine 邮件列表论坛找到了我自己问题的答案。 好像我刚才搜索了错误的关键字...

不幸的是,教义 2 并不支持它。真可惜! :(

来自学说文档:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/limitations-and-known-issues.html#join-columns-with-non-primary-keys

无法使用指向非主键的连接列。 Doctrine 会认为这些是主键并创建延迟加载 代理数据,这可能会导致意外结果。教义 出于性能原因,无法验证此方法的正确性 在运行时设置,但只能通过验证架构命令。

类似问题:是否可以为 JoinColumn 引用“id”以外的列?

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

原则 2 映射引用唯一键 的相关文章

  • 即使使用“autoReconnect=true”,MySql JDBC 也会超时[重复]

    这个问题在这里已经有答案了 有时 我的 Java Tomcat6 Debian Squeeze 应用程序无法与 MySql 服务器通信 Tomcat 应用程序位于前端服务器上 而 MySql 位于单独的 仅限 MySql 的机器上 一个典型
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • 如何使用 PHP 构建正确的 SOAP 请求

    我需要格式化 构建此 SOAP 服务 的请求 http api notificationmessaging com NMSOAP NotificationService wsdl http api notificationmessaging
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • Xdebug V3 不会停止 VSCode 中的断点

    我正在尝试使用 VSCode 在 XAMPP 上进行调试 但没有成功 我知道有很多关于这个的问题 我已经尽了一切努力 但仍然行不通 我的 xdebug 扩展确实有一件奇怪的事情 我目前使用 PHP v7 4 12 和 Xdebug 版本 3
  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • 在 foreach 中使用 QueryPath 的多个查找

    我正在使用 QueryPath 和 PHP 这发现 eventdate 没问题 但不会为 dtstart 返回任何内容 qp htmlqp url foreach qp gt find table schedule gt find tr a
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • PHP session_regenerate_id 和黑莓浏览器

    问候 我正在开发一个登录系统 并陷入了黑莓浏览器身份验证的困境 他们似乎对 PHP 的 session regenerate id 有问题 有人可以建议替代方案吗 以下是身份验证和登录脚本 UPDATE看来会话一般都不起作用 拿出 sess
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert
  • PHP更改小数点分隔符

    在某些情况下 PHP 会在操作后更改小数点分隔符 下面是一个示例 为什么小数点分隔符变成 这是一个多语言网站 在西班牙语版本中 区域设置设置为西班牙语 es ES 小数点分隔符为 这就是为什么正在改变 解决方案是强制 LC NUMERIC
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht

随机推荐

  • 不平衡数据和加权交叉熵

    我正在尝试使用不平衡数据训练网络 我有 A 198 个样本 B 436 个样本 C 710 个样本 D 272 个样本 我已经阅读了有关 weighted cross entropy with logits 的内容 但我找到的所有示例都是用
  • TableRow 跨度不适用于动态添加的行

    我在将行动态添加到滚动视图内的 TableLayout 时遇到以下问题 这些行遵循以下模式 第 1 行 单元格横跨整个表格第 2 行 两个单元格第 3 行 单元格横跨整个表格 N 行 两个单元格 问题在于 具有一个单元格跨越该行的行实际上根
  • 重写 ApplicationRecord 初始化,是个坏主意吗?

    我正在创建一个foo像这样的对象 foo Foo new foo params foo bar Bar where name baz first or create 但我还需要其他对象来执行此操作 所以 我想到了重写Foo初始化方法执行如下
  • 如何在运行时从一个应用程序切换到另一个应用程序

    是否有可能使用 Appium 在运行时从一个应用程序切换到另一个应用程序 Thanks 终于我找到了准确的答案 希望它对某些人有用 source https www linkedin com grp post 6669152 6027319
  • 如何在执行某个动作后自动触发回车键按下事件?

    I m writing some unit test in my web apps and I want to automatically trigger an Enter key pressed event from my page af
  • 是否有维护插入顺序的 IdentityHashMap 实现?

    我需要一个 HashMap 1 通过对象引用匹配键 并且 2 迭代时保持插入顺序 这些功能分别在 IdentityHashMap 和 LinkedHashMap 中实现 有没有办法获得适合我需要的数据结构 Java 标准或第 3 方库 如
  • Angular 6 中 MatDialog 关闭且数据库中的数据更新后如何刷新组件?

    我正在学习 Angular 6 的 MEAN 堆栈应用程序 在这里 我想在添加新的客户端 汽车 司机 预订或更新新的客户端 汽车 司机 预订后刷新组件 但是添加新值后 显示所有值的组件不会更新或刷新 当时无法看到当前值 但是当我在组件之间路
  • 什么是伞头?

    伞头基本上是什么 它有什么用 我收到如下所示的警告 这是什么意思
  • 什么是 UnsafeMutablePointer?如何修改底层内存?

    我正在尝试使用 SpriteKit 的SKMutableTexture类 但我不知道如何工作UnsafeMutablePointer lt Void gt 我有一个模糊的想法 它是指向内存中一系列字节数据的指针 但我该如何更新呢 这在代码中
  • 获取对象名称和函数名称

    这实际上是2个问题 1 有没有一种通用的方法来获取实例的类名 所以如果我有一个类 class someClass object 我想要一种内置的方式来给我一个字符串 someClass 2 与函数类似 如果我有 def someFuncti
  • C++ 没有指针或引用的虚函数调用

    据我所知 虚函数调用通常需要指针或引用 所以我对下面的代码感到非常惊讶 include
  • 上传意图函数 Dialogflow V2

    我正在尝试开发一个API来上传意图DialogflowV2 我已经尝试过下面的代码片段 但是如果尝试与它进行通信 它不起作用Dialogflow它确实有效 检测意图 并且确实得到了回复Dialogflow以便查询 允许 我是管理员 gt 服
  • 将 FopFactoryBuilder baseURI 设置为 jar 类路径

    我正在将 Apache FOP 1 0 项目升级到 Apache FOP 2 1 在此项目中 所有必需的文件都打包在 jar 文件中 我添加了新的 FopFactoryBuilder 来生成 FopFactory FopFactoryBui
  • CKEditor4:使文本不同于 HTML

    I add StrInsert plugin to my CKEditor It basically adds a button which in my editor is labeled CRM Field 该按钮的作用是将一个值附加到我
  • 首先将文本小写,然后大写。用CSS可以吗?

    首先将文本小写 然后大写 用CSS可以吗 编辑 示例 HELLO WORLD gt Hello World Edit2 我有一个全部大写的国家 地区列表 例如UNITED KINGDOM 我必须让它看起来像United Kingdom Ye
  • 在 ScrollViewer 中使用 WPF DataGrid 虚拟化

    我知道 DataGrid 支持虚拟化 因此它仅为可见行创建网格单元 但是 这似乎仅在 DataGrid 大小受到限制的情况下才有效 在我的场景中 DataGrid 放置在滚动查看器内 如下所示
  • 如何将 \x00 作为参数传递给程序?

    我有一个小程序 我希望将 shellcode 作为参数传递 在shellcode中 需要传递 x00 我尝试了以下命令 program python c print x01 x00 x00 x00 x9c xd8 xff xbf 但 x00
  • ag-网格行未删除

    我正在尝试从我的 ag Grid 中删除一行 如下所示 let alertRow RowNode this gridApi getRowNode rowIndex console log alertRow this gridApi upda
  • Borland x86 内联汇编器;获取标签的地址?

    我使用 Borland Turbo C 和一些内联汇编代码 因此大概是 Turbo Assembler TASM 风格的汇编代码 我希望做到以下几点 void foo bar void asm mov eax SomeLabel SomeL
  • 原则 2 映射引用唯一键

    基本问题 是否可以使用不引用主键而仅引用唯一键的 Doctrine 来映射关联 扩大的视野 我有一个实体 Participation which may参考2个其他实体 DropoutCause and DischargeType 根据此组