gpt4 book ai didi

php - Inherited() 标志 : propertyName vs. storageName

转载 作者:行者123 更新时间:2023-12-03 16:34:25 25 4
gpt4 key购买 nike

我正在寻找一些信息/文档,这有助于我理解为什么在继承的情况下(ManyToOne 或 OneToOne)连接不是使用存储名称而是使用相应实体对象类的属性名称完成的......有人可以请解释一下底层机制?
我所指的特殊情况是,当加入字段为 时不是 一个外键。特别是我指的是这个代码部分:
ManyToOneJoinBuilder.php, line 57
当有 涉及外键,将使用 propertyName 进行连接,但显然这不能与 storageName 相同......并生成错误......当结果sql被执行时!

最佳答案

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

For every inherited field you have to add a binary column to the entity, which is used for saving the inherited information in a read optimized manner


如果你看一下 product 的列您会发现名为 manufacturer 的列, taxdeliveryTime .这些是用于加入匹配关联的 FK 获取的存储列。
这对于数据抽象层来说是必要的,因此它可以连接关联的表而无需读取父实体的行。这极大地提高了性能,因为您可以在一个 SQL 查询中加入多个关联,并且数据库可以针对该查询进行优化。否则,您需要先读取实体和父实体,以确定某些关联是否从父实体继承到子实体,以及在哪个 FK 上执行连接。
这在 docs 的这一部分有简短的描述。 .
我希望这回答了你的问题。

关于php - Inherited() 标志 : propertyName vs. storageName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62712235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com