我是Symfony2的新手(几年前使用过symfony 1.x),我试图了解如何处理与Doctrine2的实体关系。 (很明显,如果Symfony2书中有更多关系示例而不是简单地引用Doctrine2文档,那将是很好的: - )
所以我有一个简单的产品实体,我想与多个类别相关联(即单个产品可以分为多个类别)。从表面上看,这看起来像是一对多的关系,但我认为这样的关系可以通过数据库中的连接表来完成。所以我正在做这样的事情:
class Product
{
....
/**
* @ORM\ManyToMany(targetEntity="Category");
**/
private $categories;
}
执行模式更新确实会按预期在数据库中创建连接表。但是我想知道我是否错误地将它变成了多对多呢?我想我会询问最佳做法以及你将如何做到这一点?任何人都可以提供建议和/或提供示例吗?
答案 0 :(得分:2)
您的句子“单品可以分为多个类别”是正确的,但这也是正确的:“多个产品可以分为多个类别”。那是因为你没有使用好的句子,这是:
这意味着你有多对多的关系。
如果是
然后你会有一对多和多对一的关系。
答案 1 :(得分:0)
如果你想要多对多的关系,你需要一个中间表
class Product
{
/**
* @ManyToMany(targetEntity="Categories")
* @JoinTable(name="Product_Category",
* joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="Category_id", referencedColumnName="id")}
* )
*/
private $categories;
}