繁体   English   中英

使用外键时在 null 上调用成员函数 comments()

[英]Call to a member function comments() on null when use foreign key

这是错误在 null 上调用成员函数 comments(),在模型中给出关系仍然显示此错误文章模型

function user() {
return $this->belongsTo(User::class, 'id');
}
public function comments()
{
    return $this->hasMany(Comment::class, 'id');
}

评论模型

 public function user()
{
    return $this->belongsTo(User::class);
}
public function article()
{
    return $this->belongsTo('App\Article');
}

这是控制器

  public function store(Request $request)
{
    //dd($request->all());
      Auth::user();   
    $comment = new Comment;
    $comment -> user_id=Auth::user()->id;
    $comment-> comment = $request->get('comment');
   $article = Article::find($request->article_id);

    $article->comments()->save($comment);
     return redirect()->back()->with('success', 'your comment,successfully save');   

}

这是刀片文件

<form method="post" action="{{ route('comment.store') }}">
                    @csrf
                    <div class="form-group">
                        <textarea class="form-control" name="comment"></textarea>
                        <input type="hidden" name="article_id"/>
                    </div>
                    <div class="form-group">
                        <input type="submit" class="btn btn-success" value="Add Comment" />
                    </div>
                </form>

您需要为隐藏字段设置一个值。

<input type="hidden" name="article_id" value="{{ $article->id }}"/>

其次,为了更容易调试这些错误,使用findOrFail()将确保您的应用程序崩溃,并显示正确的错误消息。 而不是仅仅返回null。

$article = Article::findOrFail($request->article_id);

编辑

您还将两种保存方法混合在一起,将文章与评论相关联或创建新评论。 这是我喜欢使用的方法。

$comment = new Comment;
$comment->user_id = Auth::user()->id;
$comment->comment = $request->get('comment');

$article = Article::find($request->article_id);
$comment->article()->associate($article);
$comment->save();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM