【问题标题】:Many-To-One with multiple target entities具有多个目标实体的多对一
【发布时间】:2013-04-07 15:24:32
【问题描述】:

这看起来很简单,但我做错了:

共有三个实体:FruitVegetableSnack。 Snack 具有 idtimefood 字段。食物是指任一一种水果一种蔬菜。所以它基本上是一种多对一/一对多的关系,因为一种零食总是只能容纳一种食物。但目标实体不止一个。

我将如何在 Doctrine2 中映射它?

在了解 Doctrine2 之前我会使用的一个简单解决方案是使用两个字段:food_typefood_id。但是我怎样才能将食物类型与正确的实体联系起来呢?我想到了一个 JoinColumns 数组,但找不到连接正确实体的方法。我还查看了映射的超类,因为有一个 DiscriminatorColumn,但这似乎也是错误的方法。如果我做对了,超类本身就不能是一个实体——所以我不能创建一个食物实体。

感谢任何帮助。我确定我在这里遗漏了一些简单的东西。

【问题讨论】:

标签: php database symfony doctrine-orm


【解决方案1】:

您可以创建一个名为Food 的(抽象)映射超类,它可以保存FruitVegetable 的一些基本信息。

您的问题的关键字是inheritance mapping,这是它的文档:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html#inheritance-mapping

然后你可以在你的实体关系中引用这个映射的超类。

【讨论】:

  • 谢谢,这行得通!我对文档中的声明感到困惑:A mapped superclass cannot be an entity.
  • @Jenechka:文档中的示例(参见上面的链接,第 6.1 章)实际上是一个工作示例。
  • 能否更新上面的链接?现在是 404 页面 :(
  • @stedekay 非常感谢
猜你喜欢
  • 2016-01-13
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多