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

Lov*_*ess 7 php mysql laravel

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

文章"belongsTo"一个用户和一个用户"hasMany"文章.

因此,我的文章迁移有一个名为"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();
    });
Run Code Online (Sandbox Code Playgroud)

然而,每当我创建一个文章,我在隐藏字段中传递"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() !!}
Run Code Online (Sandbox Code Playgroud)

这是错误消息.我知道我不会尝试将'user_id'的值插入到articles表中.

SQLSTATE [23000]:完整性约束违规:1452不能添加或更新子行(外键约束失败tags.articles,约束articles_user_id_foreign外键(user_id)参考users(id))(SQL:插入articles(title, body,updated_at,created_at)值(标题,一些text,2015-03-21 23:19:33,2015-03-21 23:19:33))

这是我在AriclesController上的Store方法:

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

    return Redirect::to('articles');
Run Code Online (Sandbox Code Playgroud)

有许多其他开放的Stackoverflow问题具有类似的标题,我正在寻找适合我的具体情况的答案但是没有成功,所以我提前感谢你有点陌生.

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

Ada*_*cka 37

确保您拥有文章模型user_idfillable属性.

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


The*_*mie 8

我有同样的问题。我向已经存在并具有数据的表中添加了一个外键,但由于其不断失败,因此无法运行迁移。使迁移工作的解决方案是使外键为空。

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

// then the foreign key
$table->foreign('user_id')->references('id')->on('users');
Run Code Online (Sandbox Code Playgroud)

希望它可以节省其他人的时间。


Ary*_*man 6

在为现有表运行迁移时,我遇到过几次这个错误。原因是以下任何一种:

  1. “user_id”和用户“id”的类型不同。例如,当“user_id”为 INT 且用户“id”为 BIGINT 时。

  2. 列“user_id”不为空,您需要将其设为可为空

  3. “user_id”列中存在用户“id”中不存在的值