我有一个新的Symfony 2.8安装,带有doctrine和MySQL 5.6堆栈。
执行doctrine:schema:update --force
后,我可以看到
Database schema updated successfully! "x" queries were executed
这是我的问题:即使我多次执行它,学说也总能找到架构差异。
使用--dump-sql
,我可以看到所有这些查询都与:
但是,当我检查我的数据库时,这些列已经有一个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;
nullable=false
(事件,如果已经定义为@Id),但没有效果。doctrine:schema:validate
找不到任何映射问题(当然除了同步)有什么想法吗?
答案 0 :(得分:2)
此问题已于2017年报告至少here,here和here,并且应由此PR修复。
更新doctrine/dbal
将是解决方案(not working for me though):
$ composer require doctrine/dbal:^2.7.1
从配置中取消设置服务器版本(mysql / mariadb)也可以解决问题(但仍然不适合我)。
如果一个人正在使用迁移,他仍然可以手动调整它们(但他的模式将始终未被删除)。
答案 1 :(得分:-1)
我遇到了类似的问题。对我来说,使用SQL删除表,然后再次运行DOCTRINE:SCHEMA:UPDATE --FORCE
为我工作。
似乎做一些SQL请求手动混淆了Doctrine。
这样说,我假设您已将@ORM\Table(name="my_entity")
和@ORM\Entity(repositoryClass="myrepository")
放在您的班级定义上;)。
希望它有所帮助。