【问题标题】:symfony creating entities missing uniquesymfony 创建缺少唯一的实体
【发布时间】:2013-01-02 19:10:45
【问题描述】:

Symfony 没有将电子邮件字段标记为唯一。我可以在validation.yml 中设置它,但不是一个好方法。有人知道为什么 symfony 没有将电子邮件字段标记为唯一吗?

我为从现有数据库创建实体而运行的命令:

php app/console doctrine:mapping:convert xml ./src/Frontend/AccountBundle/Resources/config/doctrine/metadata/orm --from-database --force
php app/console doctrine:mapping:import FrontendAccountBundle annotation
php app/console doctrine:generate:entities FrontendAccountBundle

我的桌子:

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
   PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=22 ;

在 config/...../User.orm.xml:

<field name="email" type="string" column="email" length="255" nullable="false"/>

在Entity/User.php中

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255, nullable=false)
 */
private $email;

【问题讨论】:

  • 我认为因为电子邮件字段并不总是必须是唯一的。这取决于你。
  • 谢谢,但是在sql中它只是varchar 255。在User.php中输入这个字段也是唯一的没有意义,因为当我执行命令时,它将被覆盖。看看我对第一个答案的命令。
  • 只需使用uniqueConstraint 将所需字段描述为唯一的。有关详细信息,请参阅此链接:docs.doctrine-project.org/en/2.0.x/reference/…

标签: php symfony symfony-2.1


【解决方案1】:

您需要指定该列必须包含这样的唯一值:

@ORM\Column(name="email", type="string", unique=true, length=255, nullable=false)
                                         ^^^^^^^^^^^

【讨论】:

  • 可以,但是Entity/User.php & User.php是由三个命令创建的。为什么 symfony 不通过这些命令创建 unique=true ?我的 sql 文件有问题吗?
  • Doctrine 从数据库的转换并不总是可靠的,它必须是这样的,因为各种数据库可能实现独特的约束。记住 symfony2 为你做了很多事情,但它很少为你做所有事情。
  • 好的,所以现在不是很好。这很愚蠢,因为我处于开发状态并且我经常更改 sql 文件。还是谢谢
【解决方案2】:

@ORM\Column(name="username", type="string", length=25, unique=true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多