[英]Unique Ids in Join table symfony2
我有两个实体产品和类别,我已经成功创建了许多关系,因此创建了一个新表,如下所示:
┌────────────────┐ ┌───────────────────┐ ┌────────────────┐
| 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;
现在,我希望product和cat_id在product_categories表中是唯一的。 怎么做?
如果您通过注释( @ManyToMany
)隐式指定多对多关系,则Doctrine将创建包含两个字段的复合主键:product_id和cat_id,因此可以保证它是唯一的。
如果您通过其他实体(例如ProductCategories
)显式指定了多对多关联,则只需添加UniqueEntity约束即可。
带有注释的示例:
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* (...)
* @UniqueEntity(fields={"product_id", "cat_id"})
*/
class ProductCategories {
// (...)
编辑:
此外,请确保已正确生成数据库。 您应该使用Doctrine的命令来执行此操作(不要手动执行!):
php -f ./app/console doctrine:database:drop
php -f ./app/console doctrine:database:create
php -f ./app/console doctrine:schema:create
这样,Doctrine将根据您的实体创建适当的数据库模式。 如果您以后(在您的实体中)要进行任何更改,则只需更新架构即可:
php -f ./app/console doctrine:schema:update --force
(使用上述大多数命令,您还可以添加--dump-sql
参数,该参数导致仅显示sql而不更改数据库)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.