简体   繁体   English

Symfony 插入 SQL 错误 - 外键约束失败

[英]Symfony Insert SQL Error - a foreign key constraint fails

I am using fixtures to generate data for my symfony project, but for some reason the following error keeps getting thrown:我正在使用夹具为我的 symfony 项目生成数据,但由于某种原因,不断抛出以下错误:

Unable to execute INSERT statement.无法执行 INSERT 语句。 [wrapped: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ( meeting . meeting_attendance , CONSTRAINT meeting_attendance_FK_1 FOREIGN KEY ( meeting_id ) REFERENCES meeting_meetings ( id ))] [包装:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败( meeting 。会议参加,约束会议meeting_id meeting_attendance_FK_1 meeting_attendancemeeting_meetings (会议ID)参考会议会议( id ))]

I am looking for why the error is occuring, I am using Symfony 1.4, with propel and a MySQL database.我正在寻找发生错误的原因,我正在使用 Symfony 1.4,带有推进力和 MySQL 数据库。


The meetings schema and attendance schema is as below, full copy at http://pastebin.com/HZhaqWSN会议方案和出席方案如下,完整副本在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 is as follows 03_meetings.yml如下

MeetingMeetings:
  PezMeeting:
    owner_id: Pezmc
    completed: 0
    location: Awesome Room
    start: 1310059022
    length: 60

and 09_attendance.yml is as follows:和 09_attendance.yml 如下:

MeetingAttendance:
  MeetingAttendance1:
    meeting_id: PezMeeting
    user_id: Pezmc
    invited: 1
    attending: 1
    apolgies: 0
    attended: 0
    apolgies_comment: None

Both my fixtures were using PHP to generate randomly but I have changed them to the above to try and locate this error!我的两个灯具都使用 PHP 随机生成,但我已将它们更改为上述以尝试定位此错误!

I assume I must have overlooked something simple, but I have been trying to debug this for over an hour and am at my wits end!我想我一定忽略了一些简单的事情,但是我已经尝试调试了一个多小时,而且我束手无策!

Does anyone know what is causing this error or how to resolve it?有谁知道是什么导致了这个错误或如何解决它?

Many thanks for your time,非常感谢您的时间,


EDIT: Someone suggested putting everything in one file, I have done this and run the file with php (to see exactly what propel is reading).编辑:有人建议将所有内容放在一个文件中,我已经这样做了,并使用 php 运行该文件(以确切了解正在读取的内容)。 It still gets the same error:它仍然得到同样的错误:

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

Still getting:仍然得到:

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`))]  

EDIT 2: The generated SQL for the tables is here: http://pastebin.com/XQmM3k7S (some tables below)DROP TABLE IF EXISTS meeting_meetings ;编辑 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;

This fixtures must be in the same text document to help with saving!此固定装置必须在同一个文本文档中以帮助保存!

This fixtures must be in the same file.这个夹具必须在同一个文件中。 I mean fixtures from 03_meetings.yml and 09_attendance.yml我的意思是来自 03_meetings.yml 和 09_attendance.yml 的固定装置

I hope this will be usefull.我希望这会有用。

Try this in config/ProjectConfiguration.class.php.在 config/ProjectConfiguration.class.php 中试试这个。 Then comment it out after data-load.然后在数据加载后将其注释掉。

class ProjectConfiguration extends sfProjectConfiguration
{
    public function setup()
    {
        // ...
    }

    public function configureDoctrine(Doctrine_Manager $manager)
    {
        $manager->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, true);
    } 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM