Doctrine2实体关系

时间:2011-11-15 12:41:52

标签: entity symfony doctrine-orm entity-relationship relationship

我是Symfony2的新手(几年前使用过symfony 1.x),我试图了解如何处理与Doctrine2的实体关系。 (很明显,如果Symfony2书中有更多关系示例而不是简单地引用Doctrine2文档,那将是很好的: - )

所以我有一个简单的产品实体,我想与多个类别相关联(即单个产品可以分为多个类别)。从表面上看,这看起来像是一对多的关系,但我认为这样的关系可以通过数据库中的连接表来完成。所以我正在做这样的事情:

class Product
{
  ....

  /**
   * @ORM\ManyToMany(targetEntity="Category");
   **/
  private $categories;

}

执行模式更新确实会按预期在数据库中创建连接表。但是我想知道我是否错误地将它变成了多对多呢?我想我会询问最佳做法以及你将如何做到这一点?任何人都可以提供建议和/或提供示例吗?

2 个答案:

答案 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;
}