我正在使用Laravel,我试图将一些数据播种到我的数据库(phpmyadmin)中。我有两张桌子,用户和carrinho。他们的关系是用户hasMany Carrinho。在Carrinho表中,我有一个外键IDUser。当我尝试播种Carrinho时,我遇到了错误。 这是我的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 );
}
}
我得到的错误是:
[照亮\数据库\ QueryException] SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(
loj a
。carrinho
,CONSTRAINTcarrinho_iduser_foreign
FOREIGN KEY(IDUser
)REFERENCESusers
(IDUser
)ON DELETE CASCADE) (SQL:插入carrinho
(IDUser
,estado
)值(1,1),(2,1))
有人知道我错了什么吗?
答案 0 :(得分:2)
您需要确保数据库中已存在具有引用ID(1&amp; 2)的用户。如果它仍然不起作用,您可以使用以下命令临时禁用外键检查:
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('carrinho')->insert( $carrinho );
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
答案 1 :(得分:0)
尽管@sisou的答案足以解决问题,但是我认为那不是应该遵循的方式。
禁用外键检查不是一个好主意。这将影响数据完整性,并可能在将来引起问题,
只需确保您拥有具有这些ID的用户(即您在carrinho
表中引用的用户)。
您的错误明确指出您在用户表中没有这些用户。
希望通过添加具有这些ID的用户来解决您的问题。
顺便说一句,您的列命名也不符合Laravel约定。 Laravel默认为user_id
,但您使用的是IDUser
。这会引起问题。
因此,您必须在自己的关系中保持这种态度。
如果Laravel关系中存在模糊线,则可以检查文档here