【发布时间】:2011-10-04 08:58:14
【问题描述】:
我正在使用固定装置为我的 symfony 项目生成数据,但由于某种原因,不断抛出以下错误:
无法执行 INSERT 语句。 [包装:SQLSTATE [23000]: 完整性约束违规:1452 无法添加或更新子行: 外键约束失败 (
meeting.meeting_attendance, 约束meeting_attendance_FK_1外键 (meeting_id) 参考meeting_meetings(id))]
我正在寻找错误发生的原因,我使用的是 Symfony 1.4,带有 propel 和 MySQL 数据库。
会议架构和出席架构如下,完整副本http://pastebin.com/HZhaqWSN
meeting_meetings:
id: ~
owner_id: { type: integer, foreignTable: sf_guard_user_profile, foreignReference: user_id, required: true }
group_id: { type: integer, foreignTable: meeting_groups, foreignReference: id }
name: { type: varchar, required: true, default: Meeting }
completed: { type: boolean, required: true, default: 0 }
location: { type: varchar, required: true, default: Unknown }
start: { type: integer, required: true }
length: { type: integer, required: true, default: 60 }
created_at: ~
updated_at: ~
meeting_attendance:
id: ~
meeting_id: { type: integer, foreignTable: meeting_meetings, foreignReference: id, required: true }
user_id: { type: integer, foreignTable: sf_guard_user_profile, foreignReference: user_id, required: true }
invited: { type: boolean, required: true, default: 0 }
attending: { type: boolean, required: true, default: 0 }
apolgies: { type: boolean, required: true, default: 0 }
attended: { type: boolean, required: true, default: 0 }
apolgies_comment: { type: varchar(255) }
03_meetings.yml如下
MeetingMeetings:
PezMeeting:
owner_id: Pezmc
completed: 0
location: Awesome Room
start: 1310059022
length: 60
而09_attendance.yml如下:
MeetingAttendance:
MeetingAttendance1:
meeting_id: PezMeeting
user_id: Pezmc
invited: 1
attending: 1
apolgies: 0
attended: 0
apolgies_comment: None
我的两个灯具都使用 PHP 随机生成,但我已将它们更改为上述以尝试定位此错误!
我想我一定忽略了一些简单的事情,但我已经尝试调试了一个多小时,而且我束手无策!
有谁知道导致此错误的原因或如何解决?
非常感谢您的宝贵时间,
编辑: 有人建议将所有内容放在一个文件中,我已经这样做了并使用 php 运行该文件(以查看 propel 正在读取的确切内容)。它仍然得到同样的错误:
MeetingMeetings:
PezMeeting:
owner_id: Pezmc
completed: 0
location: Awesome Room
start: 1310059022
length: 60
MeetingItems:
Item1:
Value: VfH0qXxGV4Ylb ZtRm DKkDE9dTzlWR z Nm TnNhxVPvZO eOn IM5 v ETOl v 4 xsA7HexNwzB YDvz I uay Sjm3rbAu iaiZIPGv l0oNSFCG To
MeetingAgendas:
Agenda1:
MeetingId: PezMeeting
ItemId: Item1
MeetingActions:
Action1:
ItemId: Item1
MeetingId: PezMeeting
Due: 1310705295
Start: 1310358321
Completed: 1
MeetingAttendance:
MeetingAttendance1:
meeting_id: PezMeeting
user_id: Pezmc
invited: 1
attending: 1
apolgies: 0
attended: 0
仍然得到:
Unable to execute INSERT statement. [wrapped: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`meeting`.`meeting_agendas`, CONSTRAINT `meeting_agendas_FK_1` FOREIGN KEY (`meeting_id`) REFERENCES `meeting_meetings` (`id`))]
编辑 2:为表生成的 SQL 在这里:http://pastebin.com/XQmM3k7S(下面的一些表)DROP TABLE IF EXISTS meeting_meetings;
CREATE TABLE `meeting_meetings`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`owner_id` INTEGER NOT NULL,
`group_id` INTEGER,
`name` VARCHAR(255) default 'Meeting' NOT NULL,
`completed` TINYINT default 0 NOT NULL,
`location` VARCHAR(255) default 'Unknown' NOT NULL,
`start` INTEGER NOT NULL,
`length` INTEGER default 60 NOT NULL,
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`),
INDEX `meeting_meetings_FI_1` (`owner_id`),
CONSTRAINT `meeting_meetings_FK_1`
FOREIGN KEY (`owner_id`)
REFERENCES `sf_guard_user_profile` (`user_id`),
INDEX `meeting_meetings_FI_2` (`group_id`),
CONSTRAINT `meeting_meetings_FK_2`
FOREIGN KEY (`group_id`)
REFERENCES `meeting_groups` (`id`)
)Type=InnoDB;
【问题讨论】:
-
会不会是
Awesome Room中的空间导致INSERT in meeting 表失败? -
我很确定 YML 不使用引号或任何东西,它通常只是纯文本,并从模式中确定它应该是什么类型
-
请注意,您现在遇到的错误与您原来的错误不相同;这次是议程,而不是出勤。我猜它与 PezMeeting 的关系在第一个插入时被绊倒了,并且顺序改变了?
-
观察得很好,我并没有真正注意到,但这是同样的错误,可能我已经改变了文件的顺序,所以首先出现了不同的错误!
-
是的,我猜这就是可能发生的事情。不过,我基本上没有建议,因为我使用 Doctrine,而不是 Propel...
标签: php mysql symfony1 symfony-1.4 propel