在Laravel 5.3中更新BelongsTo关系

时间:2016-10-23 12:36:09

标签: php laravel laravel-5.3

大家, 我的表格状态包含字段iduser_idparent_idbody
现在状态表与用户的关系如下:

状态模式

    public function user() {
        return $this->belongsTo('App\User', 'user_id');
    }

    public function scopeNotReply($query) {
        return $query->whereNull('parent_id');
    }

    public function replies() {
        return $this->hasMany('App\Status', 'parent_id');
    }

用户模型

public function statuses() {
    return $this->hasMany('App\Status', 'user_id');
}

但是,遗憾的是,当我想回复状态并使用相同的表格user_id保存到数据库中时,我无法访问statuses。我使用associate方法,StatusController是这样的:

public function postReply(Request $request, $statusId){
    $this->validate($request, [
        "reply-{$statusId}" => 'required|max:1000',
    ]);

    $status = Status::notReply()->find($statusId)->first();

    $reply = Status::create([
        'body'  => $request->input("reply-{$statusId}"),
    ])->user()->associate(Auth::user());

    $status->replies()->save($reply);

    return redirect()->back();
}

每当我尝试回复状态时,都收到此错误消息SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value

  

有人可以帮我解决这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您收到此错误的原因是因为您在Status与之关联之前创建了user_id

解决这个问题的一种方法是在创建数组中移动user_id逻辑,即:

Status::create([
    'body'    => $request->input("reply-{$statusId}"),
    'user_id' => Auth:user()->id
]);

希望这有帮助!