Я унаследовал приложение 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.
Я упускаю из виду что-то очевидное?
user_id: type: string(50)
должно бытьuser_id: type: integer
. Внешние ключи должны соответствовать типу столбца, на который указывает ссылка. - person 1ed   schedule 21.12.2012