2010-05-23 2 views
0

Итак, у меня есть таблица, в которой есть пользователи, которые могут быть друзьями.Symfony FK Constraint Issue

User: 
    actAs: { Timestampable: ~ } 
    columns: 
    name: { type: string(255), notnull: true } 
    email: { type: string(255), notnull: true, unique: true } 
    nickname: { type: string(255), unique: true } 
    password: { type: string(300), notnull: true } 
    image: { type: string(255) } 

FriendsWith: 
    actAs: { Timestampable: ~ } 
    columns: 
    friend1_id: { type: integer, primary: true } 
    friend2_id: { type: integer, primary: true } 
    relations: 
    User: { onDelete: CASCADE, local: friend1_id, foreign: id } 
    User: { onDelete: CASCADE, local: friend2_id, foreign: id } 

Он строит базу данных правильно, но когда я пытаюсь вставить тестовые данные, как:

User: 
    user1: 
    name: Danny Gurt 
    email: [email protected] 
    nickname: danny 
    password: test1 
    user2: 
    name: Adrian Soian 
    email: [email protected] 
    nickname: adrian 
    password: test1 

FriendsWith: 
    friendship1: 
    friend1_id: user1 
    friend2_id: user2 

Я получаю эту проблему ограничения целостности:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`krowdd`.`friends_with`, CONSTRAINT `friends_with_ibfk_1` FOREIGN KEY (`friend1_id`) REFERENCES `user` (`id`) ON DELETE CASCADE) 

Любые идеи?

Сложение:

Я заметил, что сгенерированный код SQL только показывает одно ограничение для таблицы friends_with:

ALTER TABLE friends_with ADD CONSTRAINT friends_with_friend2_id_user_id FOREIGN KEY (friend2_id) REFERENCES user(id) ON DELETE CASCADE; 

Может быть, это поможет!

Спасибо!

ответ

2

Назовите отношения в вашей FriendsWith таблицы по-разному, так Учение может использовать их должным образом:

relations: 
    User1: { onDelete: CASCADE, local: friend1_id, foreign: id, foreignAlias: Friend1 } 
    User2: { onDelete: CASCADE, local: friend2_id, foreign: id, foreignAlias: Friend2 } 

Число не может быть лучшими именами для отношений, но вы получите идею.

ОБНОВЛЕНИЕ - КОД:

Это должно сделать работу для вас - обратите внимание, что я добавляю отношения в таблице пользователей, не FriendsWith стол:

relations: 
    Friend1: {class: FriendsWith, local: id, foreign: friend1_id, type: many, foreignType: one, foreignAlias: User1, onDelete: CASCADE} 
    Friend2: {class: FriendsWith, local: id, foreign: friend2_id, type: many, foreignType: one, foreignAlias: User2, onDelete: CASCADE} 
+0

Еще не исправить проблема. Btw таблицы должны быть оба вызваны пользователем, потому что они ссылаются на фактические имена таблиц. Я все еще получаю ту же ошибку sql, что и раньше. Однако я заметил что-то странное. Когда я проверил сгенерированный код sql, существует только одно ограничение, созданное для таблицы friends_with, когда должно быть два. Я отправлю код в своем исходном сообщении. – Danny

+0

Существует дополнительный атрибут «класс», который вы можете использовать для указания модели, к которой она относится. Установите это, чтобы указать правую таблицу, а затем переименуйте отношения. У меня была такая же проблема, такая же ситуация, такая же проблема. Работает с вышеуказанным методом. Дайте мне знать, если вы не можете заставить его работать, и я отправлю вам свой код. – Tom

+0

Привет, Том. Спасибо за вашу помощь, но я все еще немного смущен. Если бы вы могли опубликовать свой код, который был бы очень полезен. Еще раз спасибо! – Danny

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