具有多个目标实体的多对一


Many-To-One with multiple target entities

这似乎很简单,但我不能正确:

有三个实体:Fruit, VegetableSnack。小吃有字段id, timefood。食物是对一种水果一种蔬菜的引用。所以基本上是一种多对一/一对多的关系,因为一种零食总是只含有一种食物。但是目标实体不止一个。

我如何在Doctrine2中映射它?

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

任何帮助都是感激的。

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

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

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