Doctrine (symfony) проблема с YAML-схемой / ограничением фикстуры - PullRequest
1 голос
/ 01 октября 2010

Утро,
У меня возникли некоторые проблемы при создании таблиц / загрузочных устройств.
(symfony 1.4.6 с прилагаемым Doctrine 1.2.3 (?))

Таблицы (упрощенно):

Horseman:
    tableName: Horseman    
    actAs: { Timestampable: ~ }
    columns:
        id:     { type: integer(4), primary: true, autoincrement: true, unsigned: true }
        name:   { type: string(100), notnull: true }

Stable:
    tableName: Stable
    actAs: { Timestampable: ~ }
    columns:
        id:         { type: integer(4), primary: true, autoincrement: true, unsigned: true }
        info:       { type: clob }
        id_owner:   { type: integer(4), unsigned: true }
    relations:
        Horseman:   { local: id_owner, foreign: id }

Horses:
    tableName: Horses
    actAs: { Timestampable: ~ }
    columns:
        id:         { type: integer(4), primary: true, autoincrement: true, unsigned: true }
        name:       { type: string(100), notnull: true }
        id_owner:   { type: integer(4), unsigned: true }
        id_stable:  { type: integer(4), unsigned: true }
    relations:
        Horseman:   { local: id_owner, foreign: id }
        Stable:     { local: id_stable, foreign: id }


У «Всадника» нет никаких зависимостей
У «Конюшни» есть один «Всадник»
У «Лошадей» есть один «Всадник» и одна «Конюшня»

Светильники:

Horseman:
    Hector:
        name: Hector

Stable:
    StableA:
        info: Lorem Ipsum Dolor Sit Amet
        id_owner: Hector

Horses:
    Ed:
        name: Ed
        id_owner: Hector
        id_stable: StableA

При вставке светильников:

$ php symfony doctrine:build --all --and-load

я получаю нарушение ограничения:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`issuetracker/Stable`, CONSTRAINT `Stable_id_owner_Horseman_id` FOREIGN KEY (`id_owner`) REFERENCES `Horseman` (`id`))

"Всадник""запись вставляется без проблем.
Вставка двух других записей вручную также не является проблемой:

INSERT INTO Stable (id,info,id_owner,created_at,updated_at) VALUES (null,"foo",1,NOW(),NOW())
INSERT INTO Horses (id,name,id_owner,id_stable,created_at,updated_at) VALUES (null,"foo",1,1,NOW(),NOW())


(Сохраняет ли Symfony созданные операторы вставки где-нибудь?)

Если я правильно понял, Doctrine должна сама позаботиться о том, чтобы вводить приказы (?), Так как в любом случае я даю правильный приказ, это не должно быть проблемой ..

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

Спасибо.

1 Ответ

2 голосов
/ 02 октября 2010

Попробуй так:

Horseman:
    Hector:
        name: Hector

Stable:
    StableA:
        info: Lorem Ipsum Dolor Sit Amet
        Horseman: Hector

Horses:
    Ed:
        name: Ed
        Horseman: Hector
        Stable: StableA

Вы не хотите использовать идентификатор связанного объекта, но связанный объект. Вот почему вы должны использовать имена отношений, а не имена полей.

...