Я работаю над новым скриптом, который имеет ошибку внешнего ключа.Ошибка ограничения внешнего ключа
У меня есть следующие таблицы: 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:
Обновление:
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
Это дает:
Спасибо за ваш быстрый ответ, но есть 6 записей в таблице категорий с идентификаторами от 1 до 6 http://prntscr.com/2fwg5d –
В сообщении об ошибке говорится, что нет. Можете ли вы обновить свой вопрос с помощью 'show create table request_category' и' select id from category'? – Barmar
Добавлены запросы –