【问题标题】:: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails in laravel migration:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败
【发布时间】:2021-11-11 09:01:16
【问题描述】:

在我的迁移文件中,我将组织 ID 添加到用户表中,我尝试了以下所有代码但尚未解决

class AddOrganizationIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
//            $table->foreignId('organization_id')->references('id')->on('organizations')->onDelete('cascade');
            $table->foreignId('organization_id')->constrained('organizations')->cascadeOnDelete();
//            $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }

【问题讨论】:

  • 您可以编辑您的帖子以包含您的迁移文件吗?
  • 应该是$table->foreignId('organization_id')->constrained()->onDelete('cascade');
  • 您的组织表需要在迁移之前添加到迁移中。

标签: laravel laravel-migrations


【解决方案1】:

我的用户表上有数据,因此在迁移时出现错误,为了解决这个问题,我将该字段添加为可为空

$table->foreignId('organization_id')->nullable()->references('id')->on('organizations')->onDelete('cascade');

【讨论】:

    【解决方案2】:

    如果你写foreignId需要:

    $table->foreignId('organization_id')->constrained('organizations')->cascadeOnDelete();
    

    或者只是foreign

    $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');
    

    【讨论】:

    • 无法添加或更新子行:外键约束失败
    • 你有organizations 表吗?需要先迁移该表
    • 语法错误或访问冲突:1072 表中不存在键列“organization_id”
    • 我正在同时迁移两个迁移组织,然后将组织 ID 添加到用户
    • 需要更多信息。添加以质疑所有涉及的迁移
    【解决方案3】:

    问题可能是此迁移在 organizations 表迁移之前运行,当它试图找到它以创建约束时它失败了。

    我建议在 AddOrganizationIdToUsersTable 上:

    Schema::table('users', function (Blueprint $table) {
                $table->foreignId('organization_id');
            });
    

    关于组织创建迁移:

    Schema::table('users', function(Blueprint $table) {
                $table->foreign('organization_id')->references('id')->on('organizations');
            });
    

    #2 解决方案: 通过更改文件名上的时间戳,将组织表的迁移移动到您的 AddOrganizationIdToUsersTable 之前运行

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 2018-04-26
      • 2014-03-12
      • 2016-10-27
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多