大家,
我的表格状态包含字段id
,user_id
,parent_id
,body
。
现在状态表与用户的关系如下:
状态模式
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
。
有人可以帮我解决这个问题吗?
谢谢
答案 0 :(得分:0)
您收到此错误的原因是因为您在Status
与之关联之前创建了user_id
。
解决这个问题的一种方法是在创建数组中移动user_id
逻辑,即:
Status::create([
'body' => $request->input("reply-{$statusId}"),
'user_id' => Auth:user()->id
]);
希望这有帮助!