好的,所以基础是我希望能够对我的每个帖子发表评论。每个评论都有一个回复按钮。它不是多线程的,因此一个评论将有很多回复。这些答复将没有答复。我也希望能够喜欢和不喜欢评论/回复。所有这些都不会绑定到用户模型或任何此类模型。公众访问者可以添加评论并回复评论,但需要获得批准。
这就是我到目前为止所了解的逻辑。我在这里的路线是否正确(希望这篇文章也可能对其他人有所帮助):
所以我创建了一个Comment
模型。然后创建一个名为comments
的表。
我创建了一个名为Reply
的模型和一个名为replies
的表
最后,一个模型名称Like
及其表likes
所以关系是:
comments
将有许多replies
,而replies
属于一个comment
replies
和comments
将有许多likes
。
现在讲逻辑:
我将使用AJAX调用CommentController
上的store函数来存储评论。我将调用ReplyController
上的store函数来存储答复。至于喜欢,LikeController
存储功能将为评论和回复存储喜欢。
这是表结构:
评论表
回复表格
喜欢表
现在我不明白的是,喜欢餐桌。拥有comment_id
和reply_id
以及like
和dislike
是否正确?
每当有人单击“喜欢”或“不喜欢”并将其存储在表中时,如果它是对相应ID列的id
的回复或评论,我都可以调用存储功能。逻辑对吗?
此外,如果您有任何建议或更好,更有效的方法,请告诉我。 这太长了,所以我就把它留在这里。
修改
也忘了提一下,我不确定我将如何从数据库到刀片计算喜欢的数量并计算它。不具有上述当前结构。另外,如何检查并查看该人是否已喜欢。如果是这样,请勿让他们再次喜欢或不喜欢。一个喜欢的人不能不喜欢。他们只能做一件事。
答案 0 :(得分:1)
我绝对建议您将评论,回复和喜欢的User
与评论和回复相关联。
您可以通过多种方式使用“喜欢”系统来允许访客使用,但是,这很容易解决,最终会使您的“喜欢”统计信息失效。
前进的示例数据库结构为:
评论和答复
喜欢
likes
表已设置为用作Polymorphic关系,例如在您的Comment
模型中:
public function likes()
{
return $this->morphMany(Like::class, 'likeable');
}
然后添加一个类似的内容,您将得到类似的内容:
$like = new Like(['user_id' => auth()->user()->id, 'liked' => true]);
$comment->likes()->save();
然后,您可以采用多种不同的方法来检查当前的auth用户是否喜欢某个帖子,其中一个示例是具有单独的关系,以便您渴望加载结果:
public function authUserLike()
{
return $this->morphOne(Like::class, 'likeable')->where('user_id', auth()->id());
}
然后,如果auth_user_like
是null
,则说明他们还不喜欢该评论。
答案 1 :(得分:1)
我看不到对“答复表”的任何需求,只需在评论表中使用 parent_id 。本教程可以帮助您入门Nesting Comments in Laravel