База данных FAIL - схема базы данных не синхронизируется с текущим файлом сопоставления

Может кто-нибудь объяснить следующее сообщение об ошибке проверки схемы доктрины:

The error message returned by the schema validate function

Вот определение ORM yaml для каждого объекта в отношениях manyToMany, созданное в соответствии с разделом 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: {  }

И инверсная конфигурация yaml UserRole:

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;

Как вы можете видеть, это довольно упрощенная настройка со справочной таблицей для определения пользовательских ролей или набора пользователей в заданной роли пользователя. Тем не менее, я получаю эту неприятную ошибку синхронизации. Я ничего не читал здесь или в Интернете, который отвечает на этот вопрос в каких-либо кратких подробностях, я надеялся, что кто-то сможет прояснить, могу ли я оставить эту конфигурацию и проигнорировать эту ошибку?

Ответ 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

Ответ 2

Это просто: какое-либо поле или отношение, или сущность и т.д. еще не были переведены как столбец или таблица в вашу схему базы данных. Обновите свою схему, и все будет в порядке.

Ответ 3

для Symfony3:

app/console изменен на bin/console, --full-database до --complete

поэтому последняя команда будет:

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

Ответ 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-doctrine не являются большим поклонником целых чисел без знака, так как я вижу небольшое изменение в схеме, которую я опубликовал. Во всяком случае, проблема решена.

Ответ 5

php bin/console doctrine: schema: update --dump-sql Возможно, он исправил мою проблему