我对SQL数据库的经验比对Symfony的经验更多,我希望有人可以澄清Doctrine如何将数据库连接到Symfony的association mappings。
以 Category 和 Product 之间的one-to-many
映射为例:
我几乎不需要在每个类别记录中记录productIDs
作为长字符串,我认为这是一个不必要的开销。如果我真的需要在将来获得类别记录中所有产品的列表,那么我认为我可以手动查询它吗?
通过扩展,为了得到上述内容,我需要一个unidirectional many-to-one关联。如果是这种情况,那么我是否仍然(如果需要,我将如何?)能够控制on delete cascade
这样的事情?
答案 0 :(得分:2)
我认为你并不完全理解这在Doctrine中是如何运作的。我希望这会有所帮助:
如果您在one-to-many
和Category
(一个类别包含许多产品)之间使用原则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
属性仅存在于对象模型中,而不存在于数据库模型中。