2016-07-21 5 views
0

Доброе утро,CakePHP 3: SQLSTATE [23000] Ошибка базы данных

Я разрабатываю приложение CakePHP 3, где пользователь авторизованы могут оставлять комментарии. После входа в систему, я попытался отправить некоторые комментарии, и я получил следующее сообщение об ошибке базы данных: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ( aenterprises . comentario , CONSTRAINT comentario_ibfk_1 FOREIGN KEY ( user_id ) REFERENCES пользователи ( ID ) ON DELETE CASCADE ON UPDATE CASCADE)

как я могу решить эту проблему?

пользователи таблице:

CREATE TABLE `users` (
    `id` int(11) NOT NULL, 
    `nome` varchar(200) NOT NULL, 
    `email` varchar(200) NOT NULL, 
    `password` varchar(200) NOT NULL, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

comentario стол:

CREATE TABLE `comentario` (
    `id` int(11) NOT NULL, 
    `user_id` int(11) NOT NULL, 
    `autor` varchar(200) NOT NULL, 
    `comentario` mediumtext NOT NULL, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Indexes for dumped tables 
-- 

-- 
-- Indexes for table `comentario` 
-- 
ALTER TABLE `comentario` 
    ADD PRIMARY KEY (`id`), 
    ADD KEY `user_id` (`user_id`) USING BTREE; 

-- 
-- AUTO_INCREMENT for dumped tables 
-- 
ALTER TABLE `comentario` 
    ADD CONSTRAINT `comentario_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

UsersTable.php - инициализация функции:

public function initialize(array $config) 
    { 
     parent::initialize($config); 

     $this->table('users'); 
     $this->displayField('id'); 
     $this->primaryKey('id'); 

     $this->addBehavior('Timestamp'); 

     $this->hasMany('Comentario', [ 
      'foreignKey' => 'user_id' 
     ]); 
    } 

ComentarioTable.php - инициализация функции:

public function initialize(array $config) 
    { 
     parent::initialize($config); 

     $this->table('comentario'); 
     $this->displayField('id'); 
     $this->primaryKey('id'); 

     $this->addBehavior('Timestamp'); 

     $this->belongsTo('Users', [ 
      'foreignKey' => 'user_id', 
      'joinType' => 'INNER' 
     ]); 
    } 
+0

Вам нужно всего лишь вставить user_id в таблицу комментариев, кому комментарии не соответствуют – pradeep

ответ

0

В соответствии с вами структуры базы данных и определено ограничение

ALTER TABLE `comentario` 
    ADD CONSTRAINT `comentario_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 

Вы должны удалить это ограничение первым, потому что это ограничение ограничивает Вас в запросе обновления.

По моему опыту не нужно использовать UPDATE CASCADE. Поэтому используйте ограничение ниже.

ALTER TABLE `comentario` 
    ADD CONSTRAINT `comentario_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE; 
Смежные вопросы