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

j-g*_*yon 8 mysql symfony doctrine-orm dbal

我有一个新的Symfony 2.8安装,带有doctrine和MySQL 5.6堆栈.

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

这是我的问题:即使我多次执行它,学说总是会发现架构差异.

有了--dump-sql,我可以看到所有这些查询都与:

  • 字符串主键上添加NOT NULL
  • 在datetime字段上添加NOT NULL

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

以下是单个属性/列的示例:

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

这是一个结果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 ;
Run Code Online (Sandbox Code Playgroud)

在这里,查询原则尝试使用以下doctrine:schema:update命令执行:

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

有任何想法吗 ?

小智 -1

我遇到过类似的问题。对我来说,使用 SQL 删除表然后再次运行DOCTRINE:SCHEMA:UPDATE --FORCE对我来说很有效。

似乎手动执行一些 SQL 请求会混淆 Doctrine。

这么说,我假设您已经将@ORM\Table(name="my_entity")和放在@ORM\Entity(repositoryClass="myrepository")了您的类定义上;)。

希望有帮助。