Orm 原则一对多映射:多大的;“许多”;边是?

Orm 原则一对多映射:多大的;“许多”;边是?,orm,doctrine-orm,symfony,Orm,Doctrine Orm,Symfony,我在SQL数据库方面比在Symfony方面有更多的经验,我希望有人能够澄清关于如何将数据库连接到Symfony的原则 以类别和产品之间的一对多映射为例: 我几乎不需要在每个类别记录中将productid记录为一个长字符串,并且我假设拥有它是不必要的开销。如果我真的需要在将来获得一个类别记录中所有产品的列表,那么我假设我仍然可以手动查询它 从广义上讲,要获得上述信息,我需要一个协会。如果是这样的话,那么如果需要的话,我仍然(以及我将如何?)能够控制诸如删除级联上的之类的事情吗?我想你还没有完全理解

我在SQL数据库方面比在Symfony方面有更多的经验,我希望有人能够澄清关于如何将数据库连接到Symfony的原则

以类别和产品之间的一对多映射为例:


我几乎不需要在每个类别记录中将
productid
记录为一个长字符串,并且我假设拥有它是不必要的开销。如果我真的需要在将来获得一个类别记录中所有产品的列表,那么我假设我仍然可以手动查询它

从广义上讲,要获得上述信息,我需要一个协会。如果是这样的话,那么如果需要的话,我仍然(以及我将如何?)能够控制诸如删除级联上的
之类的事情吗?

我想你还没有完全理解这在理论中是如何工作的。我希望这有助于:

如果您在您的
类别
产品
(一个类别有多个产品)之间使用条令执行
一对多
,则意味着您只需要在产品表中设置一个
类别id
列(在本例中,产品是关系的拥有方)。您可以使关系具有双向性,而不会对类别表产生任何影响。条令将允许您通过以下操作轻松获得某一类别的产品:

$category->getProducts();
在后台,将执行一个查询,其中所有具有匹配的
category\u id
列的产品都将从数据库中解析出来,并添加到
category
实体中的产品集合中

。它与您的产品一模一样,但在产品和功能之间是一对多的

为了防止在查询类别时加载所有产品,您可以标记反面

如果你在这之后还有问题,请留下评论

更新:
所以说得很清楚:条令并没有在分类表中添加列。在您的案例中,
产品
属性只存在于对象模型中,而不存在于数据库模型中

“我几乎不需要在每个类别记录中将ProductID记录为长字符串,我假设拥有它是不必要的开销。”Symfony不这样做,只是想澄清一下。嗨@martinczerwi-你是什么意思?您是指
arraycollection
而不是
string
?我的想法是,在绝大多数用例中,所有额外的数据对我来说都是多余的。这里的例子是
特性
变量:如果你读了我的答案,你就会明白@马丁策尔维是对的。条令不会在类别表中添加列。
功能
属性仅存在于对象模型中。不在数据库模型中。非常感谢@Wilt-我想/希望我遵循。。。!那么,您是说所有的
产品\u id
都没有存储在Category表中,这是生成Category对象时在后台进行的一个附加查询吗?我的具体情况是,我有一个
类别
样式的表,它只是一个查找表-它映射到的表实际上有10000个映射,因此捕获这些映射对我没有任何价值。是的,我添加了更新,以使您和其他有相同问题的人更加清楚…感谢对象模型和数据库模型之间的澄清。在删除级联时处理
的正确方法是什么?应该在数据库模型的条令关联中声明吗?这取决于您的偏好。我通常让条令来处理,因为我觉得我有更多的控制权。另一个优点是,如果对级联操作进行更改,则不需要更新数据库模型。。。有些人两者都加,但我认为这样做是个坏主意。@Bendy read它会帮助你理解。。。