Ошибка sqlstate 23000 integrity constraint violation

I am trying to insert values into my comments table and I am getting a error. Its saying that I can not add or update child row and I have no idea what that means.
My schema looks something like this:

--
-- Baza danych: `koxu1996_test`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8_bin NOT NULL,
  `password` varchar(64) COLLATE utf8_bin NOT NULL,
  `password_real` char(32) COLLATE utf8_bin NOT NULL,
  `email` varchar(32) COLLATE utf8_bin NOT NULL,
  `code` char(8) COLLATE utf8_bin NOT NULL,
  `activated` enum('0','1') COLLATE utf8_bin NOT NULL DEFAULT '0',
  `activation_key` char(32) COLLATE utf8_bin NOT NULL,
  `reset_key` varchar(32) COLLATE utf8_bin NOT NULL,
  `name` varchar(32) COLLATE utf8_bin NOT NULL,
  `street` varchar(32) COLLATE utf8_bin NOT NULL,
  `house_number` varchar(32) COLLATE utf8_bin NOT NULL,
  `apartment_number` varchar(32) COLLATE utf8_bin NOT NULL,
  `city` varchar(32) COLLATE utf8_bin NOT NULL,
  `zip_code` varchar(32) COLLATE utf8_bin NOT NULL,
  `phone_number` varchar(16) COLLATE utf8_bin NOT NULL,
  `country` int(8) NOT NULL,
  `province` int(8) NOT NULL,
  `pesel` varchar(32) COLLATE utf8_bin NOT NULL,
  `register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `authorised_time` datetime NOT NULL,
  `edit_time` datetime NOT NULL,
  `saldo` decimal(9,2) NOT NULL,
  `referer_id` int(8) NOT NULL,
  `level` int(8) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `country` (`country`),
  KEY `province` (`province`),
  KEY `referer_id` (`referer_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=83 ;

and the mysql statement I am trying to do looks something like this:

INSERT INTO `user` (`password`, `code`, `activation_key`, `reset_key`, `register_time`,                `edit_time`, `saldo`, `referer_id`, `level`) VALUES (:yp0, :yp1, :yp2, :yp3, NOW(), NOW(), :yp4, :yp5, :yp6). Bound with :yp0='fa1269ea0d8c8723b5734305e48f7d46', :yp1='F154', :yp2='adc53c85bb2982e4b719470d3c247973', :yp3='', :yp4='0', :yp5=0, :yp6=1

the error I get looks like this:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a child row: a foreign key constraint fails
(koxu1996_test.user, CONSTRAINT user_ibfk_1 FOREIGN KEY
(country) REFERENCES country_type (id) ON DELETE NO ACTION ON
UPDATE NO ACTION)

Всем привет! При выполнении SQL запроса в Laravel выскакивает ошибка:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_username_unique' (SQL: insert into `users` (`email`, `password`, `activationCode`, `isActive`, `updated_at`, `created_at`) values (Sokolov_A_2000@mail.ru, y$KYlaTrJ4JlItR3BTQT81D.el3mt4A.Uam9DvG.6FFLKBohCaGPxQC, CMo0BXN3Dj6cM3pV, 0, 2016-06-29 13:06:38, 2016-06-29 13:06:38))

#1 29.10.2017 20:59:26

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add …

Есть три таблицы, две из них с внешними ключами:
Таблица comments
Schema::create(‘comments’, function (Blueprint $table) {
            $table->increments(‘id’);
            $table->integer(‘client_id’)->unsigned()->default(‘0’);
            $table->foreign(‘client_id’)->references(‘id’)->on(‘clients’)->onUpdate(‘cascade’)->onDelete(‘cascade’);
            $table->text(‘message’);
            $table->timestamps();
        });
Таблица clients
Schema::create(‘clients’, function (Blueprint $table) {
            $table->increments(‘id’);
            $table->text(’email’);
            $table->text(‘name’);
            $table->text(‘position’)->nullable();
            $table->integer(‘location_id’)->unsigned();
            $table->foreign(‘location_id’)->references(‘id’)->on(‘locations’)->onUpdate(‘cascade’)->onDelete(‘cascade’);
            $table->timestamps();
        });
Таблица locations
   Schema::create(‘locations’, function (Blueprint $table) {
            $table->increments(‘id’);
            $table->text(‘ip’);
            $table->text(‘country’)->nullable();
            $table->text(‘department’);
            $table->text(‘timezone’);
            $table->timestamps();
        });
Фрагмент из контроллера
$comment = new Comment();
        $comment -> client() -> email = $request -> input(’email’);
        $comment -> client() -> name = $request -> input(‘name’);
        $comment -> client() -> position = $request -> input(‘position’);
        $comment -> message = $request -> input(‘message’);
        $comment -> save();
При попытке добавить запись в эти таблицы получаю ошибку.
Текст ошибки
Illuminate Database QueryException (23000)
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`landing`.`comments`, CONSTRAINT `comments_client_id_foreign` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `comments` (`message`, `updated_at`, `created_at`) values (dfgdgdgdf, 2017-10-28 10:31:06, 2017-10-28 10:31:06))
Читал инфу по коду этой ошибки. Советуют проверить соответствие названий и типов внешних ключей. Ключи перепроверил, не смог найти косяк. Либо чего-то еще не знаю, либо чего-то не заметил. Подскажите если кто заметит косяк.
И еще один вопрос: я правильно понимаю, что при добавлении записи в таблицу clients (см. фрагмент из контроллера), автоматически заполнится соответствующая запись в таблице comments (колонка client_id)? Я полагаю это должен обеспечить метод onUpdate(‘cascade’).

Изменено Antuan (29.10.2017 21:00:09)

#2 29.10.2017 21:28:58

Re: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add …

Это происходит из-за того, что ты пытаешься добавить foreign key constraint до того, как таблица clients была создана. Измени время в названии файлов миграции так, чтобы сначала создалась таблица locations, потом clients и уже потом comments.

#3 29.10.2017 21:39:43

Re: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add …

Измени время в названии файлов миграции так, чтобы сначала создалась таблица locations, потом clients и уже потом comments.

Так и есть:
/migrations/2017_10_27_213205_CreateLocationsTable.php
/migrations/2017_10_27_213314_CreateClientsTable.php
/migrations/2017_10_27_213401_CreateCommentsTable.php
Перед этим у меня действительно был неправильный порядок миграций. Но я тогда просто не смог их запустить по той же причине. После этого я не менял время, а пересоздал их в нужном порядке. В самой БД я удалил таблицу migrations, других таблиц не было. Может что-то закешировалось?

Изменено Antuan (29.10.2017 21:40:42)

#4 29.10.2017 21:57:51

Re: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add …

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

У тебя не передается значение client_id. Сделай так:

$client = Client::create($request->only('email', 'name', 'position'));
$client->comment()->create($request->only('message'));

Не забудь добавить $fillable в обе модели.

Изменено AlexeyMezenin (29.10.2017 21:58:24)

#5 14.12.2019 22:25:59

Re: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add …

Имел такую же проблему:
Illuminate Database QueryException (23000)
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

У меня проблема решилась, тогда когда понял что добавленный позже в миграцию foreign_key «user_id», не добавлен в переменную fillable[…] что перечисляется в модели..
Как только добавил все заработало!

Изменено DmitryPHP (14.12.2019 22:29:39)

In this section we will see how to solve SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘[email protected]’ for key ‘users.users_email_unique’ in laravel 9.

Example

When you got this SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry error

1. When you add Duplicate entry and database like users name, email or other filed but table is unique.

2. if $table->string(’email’)->unique(); table is unique then you need to add unique value email.

laravel solve  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'zadymep@mailinator.com' for key 'users.users_email_unique'

laravel solve SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘[email protected]’ for key ‘users.users_email_unique’

How to solve and avoid SQLSTATE[23000] Integrity Constraint 1062 Duplicate Entry Error in Laravel

1. Add laravel unique validation to avoid duplicate Entry

'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],

2. Try to avoid use $request->all() if you use User::create($request->all()); it dangerous.

3. Use unique() table when its necessary.

avoid.

$table->string('name')->unique();
$table->string('email')->unique();

Use unique() when necessary like name will be similar like john doe and john doe but there email must be unique(). unique value like, person identity number, product code etc

$table->string('name');
$table->string('email')->unique();

1) Provide DDL for your problematic table.

DROP TABLE IF EXISTS simple_topic;
CREATE TABLE simple_topic (
id mediumint(8) unsigned NOT NULL auto_increment,
created_at int(10) unsigned NOT NULL,
updated_at int(10) unsigned NOT NULL,
replied_at int(10) unsigned NOT NULL,
node_id smallint(6) unsigned NOT NULL,
user_id mediumint(8) unsigned NOT NULL,
reply_id mediumint(8) unsigned NOT NULL default 0,
alltop tinyint(1) unsigned NOT NULL default 0,
top tinyint(1) unsigned NOT NULL default 0,
invisible tinyint(1) unsigned NOT NULL default 0,
closed tinyint(1) unsigned NOT NULL default 0,
comment_closed tinyint(1) unsigned NOT NULL default 0,
comment_count mediumint(8) unsigned NOT NULL default 0,
favorite_count smallint(6) unsigned NOT NULL default 0,
views mediumint(8) unsigned NOT NULL default 0,
title char(120) NOT NULL,
tags char(60) NOT NULL default »,
PRIMARY KEY id(id),
KEY alllist(node_id, alltop, replied_at, id),
KEY nodelist(node_id, top, replied_at, id),
KEY hottopics(node_id, created_at, comment_count, replied_at),
KEY updated(updated_at),
KEY node_updated(node_id,updated_at),
KEY allcount(node_id, id),
KEY user_id(user_id,id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2) Print out model attributes before save. Which values it shows?

array(16) { [«id»]=> NULL [«node_id»]=> string(1) «9» [«user_id»]=> string(1) «1» [«reply_id»]=> NULL [«created_at»]=> NULL [«updated_at»]=> NULL [«replied_at»]=> NULL [«views»]=> NULL [«comment_count»]=> NULL [«favorite_count»]=> NULL [«alltop»]=> NULL [«top»]=> NULL [«comment_closed»]=> NULL [«invisible»]=> NULL [«title»]=> string(8) «asfdasfd» [«tags»]=> string(0) «» }

Понравилась статья? Поделить с друзьями:
  • Ошибка sqlserver 15404 не удалось получить сведения о пользователе
  • Ошибка sqllib системная таблица sysaltfiles в экземпляре sql server
  • Ошибка sqlallochandle для драйвера в sql handle dbc
  • Ошибка sql указанный sql server не найден
  • Ошибка sql таблица не найдена schemastorage