Laravel 5:完整性约束冲突:1452 无法添加或更新子行:外键约束失败

2022-08-30 21:24:51

我有一个简单的文章模型和一个用户模型。

文章“属于”用户和用户“有很多”文章。

因此,我的文章迁移有一个名为“user_id”的外键。

    Schema::create('articles', function(Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->text('body');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });

然而,每当我创建一篇文章,在隐藏字段中传递“user_id”时,我都会收到一条错误消息。

{!! Form::open(array('route' => 'articles.store')) !!}

    {!! Form::hidden('userId', $user->id) !!}

    <div class="form-group">
        {!! Form::label('title', 'Title') !!}
        {!! Form::text('title', null, array('class' => 'form-control')) !!}         
    </div>

    <div class="form-group">
        {!! Form::label('text', 'Write your Article') !!}
        {!! Form::textarea('text', null, array('class' => 'form-control')) !!}          
    </div>

    {!! Form::submit('Create Article', array('class' => 'btn btn-default btn-success')) !!}
{!! Form::close() !!}

这是错误消息。而且我知道我不会尝试将“user_id”的值插入到文章表中。

SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(.,约束外键 () 引用 ()) (SQL: 插入到 (, , , ) 值 (标题, 一些文本, 2015-03-21 23:19:33, 2015-03-21 23:19:33))tagsarticlesarticles_user_id_foreignuser_idusersidarticlestitlebodyupdated_atcreated_at

这是我的AriclesController上的商店方法:

    Article::create([
        'title'   => Input::get('title'),
        'body'    => Input::get('text'),
        'user_id' => Input::get('userId')
    ]);

    return Redirect::to('articles');

还有数十个其他具有类似标题的开放Stackoverflow问题,我正在寻找适合我的具体情况的答案,但没有成功,因此我提前感谢您和陌生人。

如何将文章保存到我的数据库中?


答案 1

确保具有文章模型的属性。user_idfillable

http://laravel.com/docs/5.0/eloquent#mass-assignment


答案 2

我遇到了同样的问题。我向已存在且具有数据的表添加了一个外键,但我无法运行迁移,因为它一直失败。使迁移工作的解决方案是使外键为空。

$table->integer('user_id')->nullable()->unsigned();

// then the foreign key
$table->foreign('user_id')->references('id')->on('users');

希望它能在未来节省别人的时间。


推荐