这看起来很简单,但我无法做到:
有三个实体:Fruit
,Vegetable
和Snack
。 Snack包含字段id
,time
和food
。食物是指 一种水果或一种蔬菜。所以它基本上是一对多/一对多的关系,因为一个小吃总是只能容纳一种食物。但是有不止一个目标实体。
我如何在Doctrine2中映射它?
在了解Doctrine2之前我会使用的一个简单的解决方案是使用两个字段:food_type
和food_id
。但是,如何从食物类型到正确的实体建立连接?我想到了一个JoinColumns数组,但找不到连接正确实体的方法。我还看了一下映射的超类,因为有一个DiscriminatorColumn,但它似乎也是错误的方法。如果我做对了,超类本身就不能成为一个实体 - 所以我不能创建一个食物实体。
感谢任何帮助。我确定我在这里错过了一些简单的东西。
答案 0 :(得分:7)
您可以创建一个名为Food
的(抽象)映射超类,它可以包含Fruit
和Vegetable
的一些基本信息。
您的问题的关键字是inheritance mapping
,这是它的文档:http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html
然后,您可以在实体关系中引用此映射的超类。