Laravel播种数据库

时间:2014-12-07 01:25:04

标签: php mysql database laravel seeding

我正在使用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 acarrinho,CONSTRAINT carrinho_iduser_foreign FOREIGN KEY(IDUser )REFERENCES usersIDUser)ON DELETE CASCADE)     (SQL:插入carrinhoIDUserestado)值(1,1),(2,1))

有人知道我错了什么吗?

2 个答案:

答案 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