我有这个评论控制器:
class CommentsController extends Controller
{
public function store(Article $article){
$comment = new Comment();
$comment->user_id = auth()->id();
$comment->comment = request('comment');
$comment->article_id = $article->id;
$comment->save();
return back();
}
}
它有效。我试图通过将该逻辑放入我的模型来使我的代码更清晰。所以我改变了这样:
class CommentsController extends Controller
{
public function store(Article $article){
$article->addComment(request('comment'));
return back();
}
}
同时,在我的评论模型中,我这样做:
class Article extends Model
{
protected $fillable = ['title','content','user_id'];
public function comments(){
return $this->hasMany(Comment::class);
}
public function user(){
return $this->belongsTo(User::class);
}
public function addComment($comment){
Comment::create([
'comment' => $comment,
'article_id' => $this->id,
'user_id' => auth()->id()
]);
}
}
但是当我这样做时,我发现了这种错误:
"SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `comments` (`comment`, `article_id`, `updated_at`, `created_at`) values (Test comment bla bla bla..., 1, 2017-10-16 09:27:27, 2017-10-16 09:27:27)) ◀"
我似乎无法以这种方式获得user_id
,那么如何通过user id
以便我可以将其插入我的评论表中?感谢。
答案 0 :(得分:0)
尝试
\Auth::id()
而不是
auth()->id()
并转到您的数据库,并将user_id
默认为NULL
出现这种错误的原因是,当您添加以下代码时,laravel会保护数据库字段以进行批量分配,这会使所有字段都可填写。
protected $guarded = [];
另一种方法是在评论模型中添加user_id。在这种情况下,它只允许对数组中提到的字段进行批量分配。
protected $fillable = [
'user_id'
];
答案 1 :(得分:0)
试试这个:
Oct 13 2017
答案 2 :(得分:0)
您需要在user_id
模型中将$fillable
添加到Comment
数组,而不是Article
模型中,以使其正常工作。您的原始代码只是因为您没有在那里使用批量分配而工作。