Ошибка SQL вставки Symfony - сбой ограничения внешнего ключа - PullRequest
4 голосов
/ 13 июля 2011

Я использую приборы для генерации данных для моего проекта Symfony, но по какой-то причине выдается следующее сообщение об ошибке:

Невозможно выполнить инструкцию INSERT.[wrapped: SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (meeting. meeting_attendance, CONSTRAINT meeting_attendance_FK_1 FOREIGN KEY (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 (некоторые таблицы ниже) УДАЛИТЕ СТОЛ, ЕСЛИ СУЩЕСТВУЕТ 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;

Ответы [ 3 ]

1 голос
/ 13 сентября 2011

Эти приборы должны быть в одном текстовом документе, чтобы помочь с сохранением!

0 голосов
/ 17 июля 2011

Попробуйте это в config / ProjectConfiguration.class.php.Затем закомментируйте это после загрузки данных.

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

    public function configureDoctrine(Doctrine_Manager $manager)
    {
        $manager->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, true);
    } 
}
0 голосов
/ 13 июля 2011

Эти приборы должны быть в одном файле. Я имею в виду приборы из 03_meetings.yml и 09_attendance.yml

Надеюсь, это будет полезно.

...