mysql - Doctrine ORM 通过非主键获取外部实体
问题描述
我试图通过没有主键来引用外国实体
由于兼容性原因和其他我无法控制的原因,我有一张我可能无法更改的表格。它是一个简单的地区/国家,具有主要的自动增量、唯一代码(如“我们”)和其他非相关字段。
到目前为止,该项目还没有任何原则,项目中的一些表通过id引用,一些通过代码引用
我想像这样引用这个实体:
/**
* @ORM\ManyToOne(targetEntity="Country")
* @ORM\JoinColumn(name="country", referencedColumnName="code")
*
* @var Country
*/
private $countryEntity;
其他一些实体确实使用id代替。我不能同时使用@ORM\Id
两者,因为我需要同时查询它。我不想使用第二个查询来获取Country实体。我需要保留id和code。
解决方案
您不能通过非主键字段引用另一个表。
您应该迁移数据库以在与国家表的所有关系中使用主键。
您可以使用这样的查询迁移数据
UPDATE target_table SET country_id = (SELECT id FROM country WHERE country.code = target_table.country_entity_code);
推荐阅读
- java - 反序列化 GSON 中的字符串列表?
- installation - 如何以我已有的路径之间没有冲突的方式安装 Anaconda?
- c - 如何对指向有名字的地方的 void* 数组进行排序?
- zos - z/OS Unix 系统服务 BPXBATCH 以 CC=3840 结束
- rest - 休息 API 过滤器
- workflow - AEM 6.5 如何将系统用户添加到工作流管理员组
- r - 根据 r 中的预定义范围重新编码继续变量
- sql - 如何在 SQL 中向表中添加查询?
- asp.net-core - 在 .Net Core Web API 中跟踪数据库更改并使用 SignalR 向客户端发送相应推送通知的适当方法
- firebase - Firestore 数据库无法在线运行