【问题标题】:Inherited() Flag: propertyName vs. storageNameInherited() 标志:propertyName 与 storageName
【发布时间】:2020-10-23 23:46:46
【问题描述】:

我正在寻找一些信息/文档,这有助于我理解为什么在继承的情况下(ManyToOne 或 OneToOne)连接不是使用存储名称而是使用相应实体对象类的属性名称完成的。 . 有人可以解释一下底层机制吗?

我指的特殊情况是,当加入字段不是外键时。特别是我指的是这个代码部分:

ManyToOneJoinBuilder.php, line 57

当没有涉及没有外键时,将使用propertyName进行连接,但显然这不能与storageName相同......并产生错误......当结果sql被执行!

【问题讨论】:

    标签: php inheritance shopware


    【解决方案1】:

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

    来自文档

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

    如果您查看product 的列,您会发现名为manufacturertaxdeliveryTime 的列。这些是存储 FK 获取用于加入匹配关联的列。

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

    这在docs 的这一部分有简短的描述。

    我希望这能回答你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2010-09-11
      • 1970-01-01
      相关资源
      最近更新 更多