这些表之间建议的学说关系是什么?

时间:2014-02-19 12:23:12

标签: symfony doctrine-orm

我需要在Doctrine2中建模以下表格:

  • 表1.项目(产品)
  • 表2.类别
  • 表3. ItemsToCategories(id,item_id,category_id)

项目可以分为多个类别。一个类别可以有很多项目。重构数据(目前)不是一种选择,我没有设计架构。

建议使用连接表对这种多对多关联进行建模的方法是什么。 documentation似乎没有涵盖这个确切的案例,我很想听到其他人与Doctrine2和/或Symfony(2.4)做过类似的事情。

1 个答案:

答案 0 :(得分:1)

创建两个实体:ItemCategory

<?php

namespace YourApplication\Bundle\DatabaseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="Categories")
 */
class Category
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="Item", inversedBy="categories")
     * @ORM\JoinTable(name="ItemsToCategories")
     */
    protected $items;

    public function __construct() {
        $this->categories = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

<?php

namespace YourApplication\Bundle\DatabaseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="Items")
 */
class Item
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="Category", mappedBy="items")
     */
    protected $items;

    public function __construct() {
        $this->items = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

由于类别拥有项目,拥有项目属于,因此Category将成为拥有方,Item将是关系的反面。