【发布时间】:2013-09-20 16:23:36
【问题描述】:
我有两个实体产品和类别,我已经成功地创建了一个多对多关系,因此创建了一个新表,如下所示:
┌────────────────┐ ┌───────────────────┐ ┌────────────────┐
| products | | product_categories| | categories |
├────────────────┤ ├───────────────────┤ ├────────────────┤
| id# ├---------┤ product_id | ┌----┤ id# |
| -- | | cat_id ├----┘ | -- |
| -- | | | | |
└────────────────┘ └───────────────────┘ └────────────────┘
类别
/**
* @ORM\ManyToMany(targetEntity="Products", mappedBy="category")
*/
protected $product;
产品
/**
* @ORM\ManyToMany(targetEntity="categories", inversedBy="product")
* @ORM\JoinTable(name="product_categories",
* joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="cat_id", referencedColumnName="id")}
* )
**/
protected $category;
现在我希望产品和 cat_id 在 product_categories 表中是唯一的。怎么做?
【问题讨论】:
-
targetEntity="categories" 应该是大写。但我认为这不是问题的原因。您能否从您的 mysql 控制台粘贴“SHOW CREATE TABLE product_categories”的结果(我没有问,但我假设您使用 mysql 对吗?)?
-
当然,我唯一不确定的是,我必须手动在数据库(mysql)级别创建复合键还是注释会处理它???
-
教义应该处理它。
-
实际上,我已经手动创建了实体和表,并且刚刚使用命令生成了 getter 和 setter。现在,我已经为 product_category 表创建了一个复合键约束,并添加了一个 try catch 代码处理重复条目。现在我想要的一切都实现了。这是正确的做法吗??
-
不,这是个糟糕的主意!使用原则来处理您的数据库模式。我已经编辑了我的答案,以展示你应该如何做到这一点。干杯
标签: php symfony doctrine-orm