这似乎很简单,但我不能正确:
有三个实体:Fruit
, Vegetable
和Snack
。小吃有字段id
, time
和food
。食物是对或一种水果或一种蔬菜的引用。所以基本上是一种多对一/一对多的关系,因为一种零食总是只含有一种食物。但是目标实体不止一个。
我如何在Doctrine2中映射它?
在知道Doctrine2之前,我使用的一个简单的解决方案是使用两个字段:food_type
和food_id
。但是我怎样才能把食物类型和正确的实体联系起来呢?我想到了一个JoinColumns数组,但找不到连接正确实体的方法。我也看了看映射的超类,因为有一个DiscriminatorColumn,但它似乎也是错误的方法。如果我做对了,超类本身不能是一个实体——所以我不能创建一个food实体。
任何帮助都是感激的。
您可以创建一个(抽象的)映射超类Food
,它可以保存Fruit
和Vegetable
的一些基本信息。
你的问题的关键字是inheritance mapping
,这是它的文档:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html#inheritance-mapping
然后你可以在你的实体关系中引用这个映射的超类