Итак, у меня есть таблица, в которой есть пользователи, которые могут быть друзьями.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;
Может быть, это поможет!
Спасибо!
Еще не исправить проблема. Btw таблицы должны быть оба вызваны пользователем, потому что они ссылаются на фактические имена таблиц. Я все еще получаю ту же ошибку sql, что и раньше. Однако я заметил что-то странное. Когда я проверил сгенерированный код sql, существует только одно ограничение, созданное для таблицы friends_with, когда должно быть два. Я отправлю код в своем исходном сообщении. – Danny
Существует дополнительный атрибут «класс», который вы можете использовать для указания модели, к которой она относится. Установите это, чтобы указать правую таблицу, а затем переименуйте отношения. У меня была такая же проблема, такая же ситуация, такая же проблема. Работает с вышеуказанным методом. Дайте мне знать, если вы не можете заставить его работать, и я отправлю вам свой код. – Tom
Привет, Том. Спасибо за вашу помощь, но я все еще немного смущен. Если бы вы могли опубликовать свой код, который был бы очень полезен. Еще раз спасибо! – Danny