学说一对多映射:"许多"一边是?

时间:2015-12-11 08:30:22

标签: orm doctrine-orm symfony

我对SQL数据库的经验比对Symfony的经验更多,我希望有人可以澄清Doctrine如何将数据库连接到Symfony的association mappings

Category Product 之间的one-to-many映射为例:

我几乎不需要在每个类别记录中记录productIDs作为长字符串,我认为这是一个不必要的开销。如果我真的需要在将来获得类别记录中所有产品的列表,那么我认为我可以手动查询它吗?

通过扩展,为了得到上述内容,我需要一个unidirectional many-to-one关联。如果是这种情况,那么我是否仍然(如果需要,我将如何?)能够控制on delete cascade这样的事情?

1 个答案:

答案 0 :(得分:2)

我认为你并不完全理解这在Doctrine中是如何运作的。我希望这会有所帮助:

如果您在one-to-manyCategory(一个类别包含许多产品)之间使用原则Product,则表示您只需要category_id列中的$category->getProducts(); 列您的产品表(产品在这种情况下是关系的拥有方)。您可以使关系双向,而不会对类别表产生任何影响。 Doctrine将允许您通过以下方式轻松获取类别的产品:

category_id

在后台执行查询,其中所有具有匹配Category列的产品都已从您的数据库中解析出来并添加到one-to-many实体中的产品集合中。

Check the example in the docs。它与您的完全一样,但产品和功能之间只有products

要在查询类别时阻止加载所有产品,您可以标记反面as fetch="EXTRA_LAZY"

如果您在此之后仍有疑问,请发表评论。

更新

所以要说清楚:doctrine不会在类别表中添加一列。在您的情况下,eexists属性仅存在于对象模型中,而不存在于数据库模型中。