学说架构更新总是尝试添加NOT NULL

学说架构更新总是尝试添加NOT NULL

问题描述:

我有一个新的Symfony 2.8安装,包含doctrine和MySQL 5.6堆栈。学说架构更新总是尝试添加NOT NULL

执行doctrine:schema:update --force后,我可以看到
Database schema updated successfully! "x" queries were executed

这里是我的问题:即使我执行它多时间,学说始终找不到模式的差异。

随着--dump-sql,我可以看到,所有这些查询都涉及到:

  • 添加NOT NULL上主键
  • 将不能在日期时间 场NULL

但是,当我检查我的数据库时,这些列已经有一个NOT NULL。

这里是一个单一的财产/列的例子:

class MyEntity 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="string", length=5, name="cd_key") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $code; 
    ... 

下面是一个SHOW CREATE TABLE my_entity;的结果:

CREATE TABLE `my_entity` (
    `cd_key` varchar(5) COLLATE utf8_unicode_ci NOT NULL, 
    `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `number` int(11) NOT NULL, 
    PRIMARY KEY (`cd_key`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ; 

这里查询主义尝试用doctrine:schema:update要执行的命令:

ALTER TABLE my_entity CHANGE cd_key cd_key VARCHAR(5) NOT NULL; 
  • 我在每个命令执行之间清理我的Symfony缓存。
  • 我尝试在@Column注释中添加nullable=false(事件如果它已被定义为@Id),但不起作用。
  • a doctrine:schema:validate找不到任何映射问题(当然除了同步)
  • 我尝试删除并重新创建完整的数据库,但没有效果。

任何想法?

+1

不会设置'nullable = false'意味着它将NOT NULL作为该列的一部分添加?将其更改为'nullable = true'将允许该值为空。 –

我遇到过类似的问题。对于我删除表使用SQL,然后再次运行DOCTRINE:SCHEMA:UPDATE --FORCE为我工作。

看来,做一些SQL请求manualy混淆了学说。

说这个,我假设你已经把@ORM\Table(name="my_entity")@ORM\Entity(repositoryClass="myrepository")放在你的类定义上;)。

希望它有帮助。

+0

我尝试删除表(甚至是完整的数据库),但是在新的'doctrine:schema:update'之后,我遇到了同样的问题。无论如何感谢您的帮助:) – n3k