доктрина: сборка-схема игнорирует уникальный ключ - PullRequest
1 голос
/ 23 февраля 2011

Я использую команду symfony для генерации моего файла schema.yml из моей базы данных mysql 5.1, выполнив:

symfony doctrine:build-schema

Моя таблица:

CREATE TABLE `identity` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(64) DEFAULT NULL,
  `password` VARCHAR(128) DEFAULT NULL
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=INNODB DEFAULT CHARSET=latin1

Преобразуется в:

Identity:
  connection: doctrine
  tableName: identity
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: true
      primary: true
      autoincrement: true
    username:
      type: string(64)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    password:
      type: string(128)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false

Все выглядит хорошо, за исключением того, что я ожидаю, что столбец имени пользователя будет выглядеть (например, с unique: true):

    username:
      type: string(64)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
      unique: true

Кто-нибудь знает, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 07 августа 2011

Попробуйте присвоить ключу имя, отличное от (column) или (column)_idx;Например:

CREATE TABLE `identity` (
  ...

  UNIQUE KEY `username_unique` (`username`)
) ...

Я не могу найти это нигде в документации, но при создании поведения Doctrine я заметил, что если я попытаюсь создать индекс, имя которого соответствует столбцу, Doctrine переименует его в (column)_idxи отказываются сделать его уникальным.

0 голосов
/ 23 февраля 2011

Попробуйте это:

CREATE TABLE `identity` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(64) DEFAULT NULL UNIQUE,
  `password` VARCHAR(128) DEFAULT NULL
  PRIMARY KEY (`id`),
  UNIQUE INDEX `identity_username_idx` (`username`)
) ENGINE=INNODB DEFAULT CHARSET=latin1
...