Doctrine 1.2/Symfony 1.4 не создает правильных отношений внешнего ключа?

Я унаследовал приложение Symfony 1.4/Doctrine 1.2, которое я должен поддерживать. Я пытаюсь внести некоторые изменения в файл schema.yml и создать из него новые модели и sql-определения, но по какой-то причине мои отношения внешнего ключа не генерируются полностью.

Я предполагаю, что мне, вероятно, не хватает чего-то очевидного в файле schema.yml, но это не выскакивает у меня:

Я отредактировал файл schema.yml до некоторых основ:

SCHEMA.YML:
connection: doctrine
options:
  type: innodb
  charset: utf8

MasterIndex:
  tableName: master_index
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    last_name:
      type: string(255)
      notnull: true
    first_name:
      type: string(255)
      notnull: true

Poem:
  tableName: poem
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    user_id: string(50)
    title: string(250)
    pen_name: string(250)
    contents: string()
    invoice_id: integer
  relations:
    Invoice:
      local: invoice_id
      foreign: id
      foreignAlias: poems
      foreignType: many
      type: one
    MasterIndex:
      local: user_id
      foreign: id
      foreignAlias: poems
      foreignType: one
      type: many

Invoice:
  tableName: invoice
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    user_id:
      type: string(50)
      notnull: true
    amount:
      type: float()
      notnull: true

После запуска symfony доктрина: чистая доктрина: сборка-модель и доктрина: сборка-sql я получаю следующий сгенерированный schema.sql:

CREATE TABLE invoice (id BIGINT AUTO_INCREMENT, user_id VARCHAR(50) NOT NULL, amount FLOAT(18, 2) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 ENGINE = innodb;
CREATE TABLE master_index (id BIGINT AUTO_INCREMENT, last_name VARCHAR(255) NOT NULL, first_name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 ENGINE = innodb;
CREATE TABLE poem (id BIGINT AUTO_INCREMENT, user_id VARCHAR(50), title VARCHAR(250), pen_name VARCHAR(250), contents TEXT, invoice_id BIGINT, INDEX invoice_id_idx (invoice_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 ENGINE = innodb;
ALTER TABLE poem ADD CONSTRAINT poem_invoice_id_invoice_id FOREIGN KEY (invoice_id) REFERENCES invoice(id);

Я ожидаю 2 ограничения внешнего ключа в таблице стихотворений - invoice_id для таблицы Invoice и user_id для таблицы MasterIndex, но появляется только одно ограничение! Мне не хватает ограничения внешнего ключа в таблице стихотворений для таблицы master_index.

Я упускаю из виду что-то очевидное?


person Eric B.    schedule 20.12.2012    source источник
comment
user_id: type: string(50) должно быть user_id: type: integer. Внешние ключи должны соответствовать типу столбца, на который указывает ссылка.   -  person 1ed    schedule 21.12.2012
comment
@1ed Не могу поверить, что я этого не видел. Также заметил, что у меня перепутаны иностранный тип и тип (т.е. тип должен быть один, а иностранный тип много). Теперь работает как положено - спасибо!   -  person Eric B.    schedule 21.12.2012


Ответы (1)


Внешние ключи должны соответствовать типу столбца, на который указывает ссылка:

user_id: type: string(50) должно быть user_id: type: integer.

person 1ed    schedule 21.12.2012