【问题标题】:Laravel Seeding DatabaseLaravel 种子数据库
【发布时间】:2015-02-04 23:04:19
【问题描述】:

我正在使用 Laravel,我正在尝试将一些数据植入我的数据库 (phpmyadmin)。我有两张桌子,用户和carrinho。他们的关系是Users hasMany 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 );
}

}

我得到的错误是:

[照亮\数据库\查询异常] SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(loj a.carrinho,约束carrinho_iduser_foreign外键(IDUser)参考users(@987654327 @) 删除级联) (SQL: 插入carrinho (IDUser, estado) 值 (1, 1), (2, 1))

有人知道我有什么问题吗?

【问题讨论】:

  • 你引用的行,它们存在吗?

标签: php mysql database laravel seeding


【解决方案1】:

您需要确保具有引用 ID(1 和 2)的用户已经存在于数据库中。如果还是不行,可以暂时禁用外键检查:

DB::statement('SET FOREIGN_KEY_CHECKS=0;');

DB::table('carrinho')->insert( $carrinho );

DB::statement('SET FOREIGN_KEY_CHECKS=1;');

【讨论】:

    【解决方案2】:

    虽然@sisou 的回答足以解决问题,但我认为这不是应该遵循的方式。

    禁用外键检查不是一个好主意。这会影响数据完整性,并可能在未来引起问题,

    只需确保您拥有具有这些 ID 的用户(您在 carrinho 表中引用)。

    您的错误明确指出您在用户表中没有这些用户

    希望通过添加具有这些 ID 的用户来解决您的问题。

    顺便说一句,您的列命名也不符合 Laravel 约定。 Laravel 默认是 user_id,但你使用的是 IDUser。这会导致问题。 所以你必须在你的关系中指出这一点。 如果您在 Laravel 关系中有模糊线,那么您可以查看文档 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 2017-11-27
      • 2017-01-30
      • 2016-07-13
      • 2018-08-18
      • 2014-01-26
      • 2013-01-25
      • 2014-01-24
      相关资源
      最近更新 更多