【问题标题】:Symfony2 Doctrine Annotations & UNIQ_ or FK_ customisationSymfony2 Doctrine Annotations & UNIQ_ 或 FK_ 定制
【发布时间】:2013-03-27 08:54:58
【问题描述】:

我正在使用带有 Doctrine 注释的 Symfony2 在表之间创建引用。创建表时,它看起来像这样:

CREATE TABLE `guardian` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fos_user_id` int(11) NOT NULL,
  `first_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `last_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_644860558C20A0FB` (`fos_user_id`),
  CONSTRAINT `FK_644860558C20A0FB` FOREIGN KEY (`fos_user_id`) REFERENCES `fos_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

这样做的方法是在代码中创建这些Annotation,然后运行:

php app/console doctrine:schema:update --force

这是其中一个参考文献的注释:

/**
 * @ORM\OneToOne(targetEntity="SF\UserBundle\Entity\User")
 * @ORM\JoinColumn(name="fos_user_id", referencedColumnName="id")
 */
private $fosUser;

从“show create table;”可以看出上面,键的名称和约束是相当不人性化的。我猜“UNIQ_644860558C20A0FB”只是“UNIQ_”并随机附加一些东西。

我想做的是给它一个合适的名字,比如“UNIQ_fos_user_id”。这样做的原因是,如果您遇到如下错误,真的很难快速查看发生了什么,以及哪个键是问题所在(尤其是如果有多个唯一键或外键:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_644860558C20A0FB' 

我查看了文档here,但看不到任何可以让我这样做的注释属性。

【问题讨论】:

    标签: symfony annotations doctrine


    【解决方案1】:

    经过一番调查,您无法定义主键或外键的约束。但是,您可以更改唯一约束名称:

    /**
     * @Entity
     * @Table(name="ecommerce_products",uniqueConstraints={
     *     @UniqueConstraint(name="search_idx", columns={"name", "email"})})
     */
    
    猜你喜欢
    • 2011-10-06
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多