2017-10-15 94 views
0

问题

有可能是一个更简单的方法来做到这一点,我可能会使它变得复杂。我有ArticlesComments。我建立了一个API关系Laravel API

但是,我需要Articles有很多评论和Comment有一个文章。


我的尝试:

我做的第一件事就是去Article模型,并插入此函数:

public function comment() 
{ 
    return $this->hasMany('Comment'); 
} 

而且在Comment型号:

public function article() 
{ 
    return $this->belongsTo('Article', 'article_id'); 
} 

上述方法的问题是,我不知道如何去处理它控制器。我从调用中返回一个json响应,但决定使用变压器。

以下是我的CommentController存储功能。

public function store(Request $request) 
{ 
    return Comment::create($request->all()); 
} 

如何判断哪条评论属于哪篇文章以及如何在文章中更新我们有一条或多条评论?

之后,我决定去“手动”路线,并在Article上插入一个名为'comments_id'的字段,将其更改为模型上的数组,但我不知道如何更新Article上的数组。

这就是我得到的。

public function store(Request $request) 
{ 
    $article = Article::findOrFail($request->article_id); 

    $article->update(array_add($request->id)); 

    return Comment::create($request->all()); 
} 

这是错误响应:

"Missing argument 2 for array_add(), called in /var/www/html/larapi/app/Http/Controllers/CommentController.php on line 26 and defined" 

回答

0

当你创建你只需要确保它有一个article_id值所作的注释。

后,当你运行下面你会看到你的评论(县):

Article::comments->get();

+0

我该如何在变压器上添加? – Rosenberg

+0

我的意思是让我们说我想显示评论属于哪篇文章。我试过'Comment :: article-> get()'但是我得到这个错误:'解析错误:语法错误,意外' - >'' – Rosenberg

0

你的第一个想法是足够了,不要在你的文章做一个comments_id列!

public function store(Request $request) 
{ 
    return Comment::create($request->all()); 
} 

之后,你可以只使用$comment->article得到它涉及到$comment或者如果你有一个$article$article->comment获得评论文章模型。 (我会重命名为comments顺便说一句,通常你使用复数为hasMany由于显而易见的原因。)

所以,如果你想在一个视图中的所有意见,基本上,你只需通过Article::find($id)获取文章或者更确切地说,只是让Laravel通过隐含的结合

public function show(Article $article) 
{ 
    return view('article.show', compact('article')); 
} 

而在刀片模板做的工作,你然后只遍历评论像

foreach ($article->comments as $comment) { 
    // stuff 
} 

PS我只是重读,看看我是否错过了什么......你想要一个API:PI很抱歉,我正在开会,稍后我会更新我的答案,但也许这会对你有一点帮助

编辑
不改变任何东西,只需使用$ article-> comments获得该文章的所有评论的集合,然后将其作为json返回。