2013-09-12 2 views
3

У меня есть конкретная ситуация, когда составной первичный ключ одного объекта является частью первичного ключа другого объекта. Это случай специализации, но теперь это не имеет значения.Первичный ключ составной части Doctrine как часть первичного ключа другого объекта

Я использую Doctrine для создания объектов из базы данных, но доктрина не поддерживает составной внешний ключ в качестве первичного ключа:

It is not possible to map entity 'XXXXX' with a composite primary key as part of the primary key of another entity 'YYYYYY#id_xxxxx' 

Кто-нибудь знает решение этой ситуации? Это может быть решение или модель редактирования Doctrine и структура базы данных.

UPDATE 1

CREATE TABLE `amandman` (
    `iddokumenta` int(11) NOT NULL, 
    `datumdostavljanjaskupstini` date NOT NULL, 
    `tekst` text, 
    `datumizmene` date DEFAULT NULL, 
    `izmenjenitekst` text, 
    `iddokumentapredlogazakona` int(11) DEFAULT NULL, 
    `datumdostavljanjaskupstinipredlogazakona` date DEFAULT NULL, 
    PRIMARY KEY (`iddokumenta`,`datumdostavljanjaskupstini`), 
    KEY `iddokumentapredlogazakona_idx`   (`iddokumentapredlogazakona`,`datumdostavljanjaskupstinipredlogazakona`), 
    CONSTRAINT `iddokumenta45` FOREIGN KEY (`iddokumenta`, `datumdostavljanjaskupstini`)  REFERENCES `dokument` (`iddokument`, `datumdostavljanjaskupstini`) ON DELETE NO ACTION ON  UPDATE CASCADE, 
CONSTRAINT `iddokumentapredlogazakona` FOREIGN KEY (`iddokumentapredlogazakona`, `datumdostavljanjaskupstinipredlogazakona`) REFERENCES `predlogzakona` (`iddokumenta`, `datumdostavljanjaskupstini`) ON DELETE NO ACTION ON UPDATE CASCADE) 
ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Это одна из сущностей из базы данных, которые не могут быть сгенерированы доктриной.

+1

Что вы подразумеваете под словом «композитный»? Вы просто сгруппировали два ключа вместе или создали первичный ключ, охватывающий два столбца? – Adder

+0

Можете ли вы скопировать свои сущности в вопрос, пожалуйста? –

+0

Прошу прощения за поздний ответ. Под композитом я подразумеваю, что первичный ключ охватывает два столбца. – poletn23

ответ

5

Вы столкнулись с этой проблемой, потому что ваш составной внешний ключ является составным первичным ключом другой таблицы. Это не хорошая практика развития, поэтому она просто не поддерживается Доктриной, и я сильно сомневаюсь, что она когда-либо будет.

Решение 1 (предпочтительный):

Добавить один, автоматическое приращение первичного ключа EstablecimientosSec. Затем вы можете связать с этим EstablecimientosSec.id.

Решение 2:

Если изменение структуры базы данных абсолютно невозможно, не отображают отношения. Вместо этого вы можете получить связанные объекты EstablecimientosSec в отдельном запросе с использованием составного первичного ключа. Это не префектное решение, но оно работает под этими ограничениями. Совет. Не запрашивайте связанные объекты как часть цикла.

+0

Спасибо. Я решил для решения один. – poletn23

+0

Не могли бы вы отметить мой ответ как ответ в этом случае? Ура! – afilina

+0

Я только что пришел к той же проблеме. Решение 1 для меня невозможно. Что вы имеете в виду именно с решением 2? А как это сделать? – craphunter

Смежные вопросы