数据库失败 - 数据库模式是不同步与当前的映射文件(Database FAIL - The data

2019-07-04 09:05发布

任何人都可以解释以下主义架构验证错误信息,请:

这里是在多对多关系中的每个实体的所述YAML ORM定义,与所述的第5.9节内联创建的文档 。

Rep\Bundle\ProjectBundle\Entity\User:
    type: entity
    table: User
    fields:
        id:
            id: true
            type: integer
            unsigned: true
            nullable: false
            generator:
                strategy: AUTO
        username:
            type: string
            length: 25
            fixed: false
            nullable: false
        salt:
            type: string
            length: 32
            fixed: false
            nullable: false
        password:
            type: string
            length: 40
            fixed: false
            nullable: false
        email:
            type: string
            length: 60
            fixed: false
            nullable: false
    manyToMany:
        roles:
            targetEntity: UserRole
            inversedBy: users
            joinTable:
                name: UserRoleLookup
                joinColumns:
                    user_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    user_role_id:
                        referencedColumnName: id
    lifecycleCallbacks: {  }

而UserRole的逆YAML配置:

Rep\Bundle\ProjectBundle\Entity\UserRole:
    type: entity
    table: UserRole
    fields:
        id:
            id: true
            type: integer
            unsigned: true
            nullable: false
            generator:
                strategy: AUTO
        name:
            type: string
            length: 50
            fixed: false
            nullable: false
    manyToMany:
        users:
            targetEntity: User
            mappedBy: roles
    lifecycleCallbacks: {  }

下面是用户表模式:

CREATE TABLE `User` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `salt` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

该UserRole的表模式:

CREATE TABLE `UserRole` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

而UserRoleLookup模式:

CREATE TABLE `UserRoleLookup` (
  `user_id` int(11) unsigned NOT NULL,
  `user_role_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`user_id`,`user_role_id`),
  KEY `user_role_id` (`user_role_id`),
  CONSTRAINT `userrolelookup_ibfk_2` FOREIGN KEY (`user_role_id`) REFERENCES `userrole` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `userrolelookup_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

正如你所看到的,这是一个非常简单的设置与查找表来决定在给定的用户角色的用户的角色或用户组。 不过,我收到这个令人沮丧的同步误差。 我读过这里没什么或在线,回答这个问题的任何详细简洁,我希望如果我安全离开这个配置和忽略此错误有人能澄清?

Answer 1:

运行此命令可以显示在SQL的差异,而无需转储你的数据库:

php bin/console doctrine:schema:update --dump-sql

您也可以运行以下命令来进行更改:

php bin/console doctrine:schema:update --force --full-database

对于Symfony2的是

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



Answer 2:

原因很简单:一些字段或关系,或者实体等还没有被翻译为您的数据库架构中的列或表。 更新你的模式,你会没事的。



Answer 3:

对于Symfony3:

app/console改为bin/console--full-database--complete

所以最后的命令是:

php bin/console doctrine:schema:update --force --complete --dump-sql


Answer 4:

对于任何有兴趣在此,重新生成我的表架构产生了以下的查找模式:

CREATE TABLE `UserRoleLookup` (
  `user_id` int(11) NOT NULL,
  `user_role_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`,`user_role_id`),
  KEY `IDX_4511E771A76ED395` (`user_id`),
  KEY `IDX_4511E7718E0E3CA6` (`user_role_id`),
  CONSTRAINT `FK_4511E7718E0E3CA6` FOREIGN KEY (`user_role_id`) REFERENCES `UserRole` (`id`),
  CONSTRAINT `FK_4511E771A76ED395` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;\

我猜的Symfony2-学说束不无符号整数的忠实粉丝,因为我可以看到我张贴的架构变化不大。 总之,问题就解决了。



Answer 5:

PHP斌/控制台学说:架构:更新自卸SQL可能是其作品固定我的问题



文章来源: Database FAIL - The database schema is not in sync with the current mapping file