为了账号安全,请及时绑定邮箱和手机立即绑定

Inherited() 标志:propertyName 与 storageName

Inherited() 标志:propertyName 与 storageName

PHP
蓝山帝景 2023-07-08 20:41:55
我正在寻找一些信息/文档,这有助于我理解为什么在继承的情况下,(ManyToOne 或 OneToOne)连接不是使用存储名称完成的,而是使用相应实体对象类的属性名称......有人可以吗请解释一下基本机制?我指的特殊情况是,当连接字段不是外键时。特别是我指的是这个代码部分:ManyToOneJoinBuilder.php,第 57 行当不涉及外键时,将使用 propertyName 进行连接,但显然这不能与 storageName 相同...并且在执行生成的 sql 时生成错误!
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

DB表中需要有额外的字段,其中外键以读取优化的方式保存。这里的约定是使用属性名称作为列名称。

来自文档

对于每个继承的字段,您必须向实体添加一个二进制列,用于以读取优化的方式保存继承的信息

如果您查看 的列,product您会发现名为manufacturertax或 的列deliveryTime。这些是存储 FK 获取的列,用于连接匹配关联。

这对于数据抽象层来说是必要的,因此它可以连接关联的表,而无需读取父实体的行。这极大地提高了性能,因为您可以在一个 SQL 查询中加入多个关联,并且数据库可以对该查询进行优化。否则,您需要首先读取实体和父实体,只是为了弄清楚某些关联是否从父实体继承到子实体,以及在哪个 FK 上执行连接。

查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信