2014-01-02 8 views
0

Я работаю над новым скриптом, который имеет ошибку внешнего ключа.Ошибка ограничения внешнего ключа

У меня есть следующие таблицы: request, category и request_category.

В таблице category есть 6 категорий, так что все хорошо. Мой сценарий вставляет данные в таблицу request, после чего он пытается добавить запись в request_category, но это не так.

Код:

$oUser = new User(); 
$oUser->firstname = $this->oLibrary->Request->post('firstname'); 
$oUser->initials = $this->oLibrary->Request->post('initials'); 
$oUser->lastname = $this->oLibrary->Request->post('lastname'); 
$oUser->zip  = $this->oLibrary->Request->post('zip'); 
$oUser->city  = $this->oLibrary->Request->post('city'); 
$oUser->email  = $this->oLibrary->Request->post('email'); 
$oUser->setStatus(UserStatus::STATUS_PENDING); 
$oUser->create(); 

$oRequest = new ServiceRequest(); 
$oRequest->title  = $this->oLibrary->Request->post('title'); 
$oRequest->description = $this->oLibrary->Request->post('description'); 
$oRequest->user_id  = $oUser->id; 
$oRequest->setStatus(RequestStatus::STATUS_INCOMPLETE); 
$oRequest->create(); 

// above here goes fine 

$oRequestCategory = new RequestCategory(); 
$oRequestCategory->category_id = $this->oLibrary->Request->post('category'); 
$oRequestCategory->request_id = $oRequest->id; 
$oRequestCategory->create(); 

Я не совсем понимаю, почему это не будет вставлять. Я проверил и оба ключа, необходимые request_table, присутствуют в базе данных. Когда я пытаюсь сделать вставку в Workbench, она бросает ту же ошибку, поэтому я предполагаю, что это ошибка в моем проекте базы данных где-то. Может кто-нибудь объяснить мне, почему я получаю эту ошибку внешнего ключа?

Сообщение об ошибке само по себе:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`ruiljedienst`.`request_category`, CONSTRAINT `fk_request_category_category1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

SQL Statement: 

INSERT INTO `ruiljedienst`.`request_category` (`category_id`, `request_id`) VALUES ('1', '1') 

Вот скриншот из соответствующих таблиц базы данных в MySQL Workbench:

http://prntscr.com/2fwce6

Обновление:

show create table ruiljedienst.request_category 

Результаты в:

CREATE TABLE `request_category` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `category_id` int(11) NOT NULL, 
    `request_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id_UNIQUE` (`id`), 
    KEY `fk_request_category_category1_idx` (`category_id`), 
    KEY `fk_request_category_request1_idx` (`request_id`), 
    CONSTRAINT `fk_request_category_category1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `fk_request_category_request1` FOREIGN KEY (`request_id`) REFERENCES `request` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1' 


select id from ruiljedienst.category 

Это дает:

http://prntscr.com/2fwhfl

ответ

1

У вас есть ограничения внешнего ключа на category_id, так что вы должны добавить id=1 в category таблицу перед тем, как добавить строку в request_category.

Убедитесь, что все указанные таблицы используют ENGINE=InnoDB.

+0

Спасибо за ваш быстрый ответ, но есть 6 записей в таблице категорий с идентификаторами от 1 до 6 http://prntscr.com/2fwg5d –

+0

В сообщении об ошибке говорится, что нет. Можете ли вы обновить свой вопрос с помощью 'show create table request_category' и' select id from category'? – Barmar

+0

Добавлены запросы –

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