Я использую Laravel и пытаюсь вставить некоторые данные в свою базу данных (phpmyadmin). У меня есть две таблицы, пользователи и Carrinho. Их отношения с пользователями имеет много Carrinho. В таблице Carrinho у меня есть внешний ключ IDUser. Я получаю ошибки, когда пытаюсь посеять Карринью.
Вот мой файл CarrinhoSeeder:
<?php
class CarrinhoTableSeeder extends Seeder {
public function run()
{
DB::table('carrinho')->delete();
$carrinho = array(
array(
'IDUser' => 1,
'estado' => true,
),
array(
'IDUser' => 2,
'estado' => true,
)
);
DB::table('carrinho')->insert( $carrinho );
}
}
Я получаю ошибку:
[Осветите \ Database \ QueryException] SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (loj
,
acarrinho
, ОГРАНИЧЕНИЕcarrinho_iduser_foreign
ИНОСТРАННЫЙ КЛЮЧ (IDUser
) РЕКОМЕНДАЦИИusers
(IDUser
) НА УДАЛЕННОМ КАСКАДЕ)
(SQL: вставить вcarrinho
(IDUser
,estado
) значения (1, 1), (2, 1))
Кто-нибудь знает, что я не так?
Вы должны убедиться, что пользователи с указанными идентификаторами (1 & 2) уже существует в базе данных. Если это все еще не работает, вы можете временно отключить проверку внешнего ключа с помощью следующего:
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('carrinho')->insert( $carrinho );
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Хотя ответа @sisou достаточно, чтобы решить проблему, но я считаю, что это не совсем тот путь, которому следует следовать.
Отключение проверка внешнего ключа не очень хорошая идея. Это нарушит целостность данных & может вызвать проблемы в будущем,
Просто убедитесь, что у вас есть пользователи с этими идентификаторами (что вы ссылаетесь в carrinho
Таблица).
Ваша ошибка ясно указывает на то, что у вас нет этих пользователей в таблице пользователей.
Надеюсь, что добавление пользователей с этими идентификаторами решит вашу проблему.
Btw, Имена ваших столбцов также не соответствуют соглашению Laravel. Laravel будет ожиданием user_id
по умолчанию, но вы используете IDUser
, Это вызовет проблемы.
Таким образом, вы должны задавать это в ваших отношениях.
Если у вас есть размытые линии в отношениях Laravel, вы можете проверить документы Вот