需要在laravel中创建注释的逻辑

时间:2018-06-24 07:08:47

标签: laravel laravel-5 comments laravel-5.6

好的,所以基础是我希望能够对我的每个帖子发表评论。每个评论都有一个回复按钮。它不是多线程的,因此一个评论将有很多回复。这些答复将没有答复。我也希望能够喜欢和不喜欢评论/回复。所有这些都不会绑定到用户模型或任何此类模型。公众访问者可以添加评论并回复评论,但需要获得批准。

这就是我到目前为止所了解的逻辑。我在这里的路线是否正确(希望这篇文章也可能对其他人有所帮助):

所以我创建了一个Comment模型。然后创建一个名为comments的表。 我创建了一个名为Reply的模型和一个名为replies的表 最后,一个模型名称Like及其表likes

所以关系是: comments将有许多replies,而replies属于一个comment repliescomments将有许多likes

现在讲逻辑:

我将使用AJAX调用CommentController上的store函数来存储评论。我将调用ReplyController上的store函数来存储答复。至于喜欢,LikeController存储功能将为评论和回复存储喜欢。

这是表结构:

  1. 评论表

    • id
    • post_id
    • 名称
    • 电子邮件
    • 评论
    • 批准
    • 时间戳
  2. 回复表格

    • id
    • comment_id
    • 名称
    • 电子邮件
    • 评论(或回复)
    • 批准
    • 时间戳
  3. 喜欢表

    • id
    • comment_id
    • reply_id
    • 喜欢
    • 不喜欢
    • 时间戳

现在我不明白的是,喜欢餐桌。拥有comment_idreply_id以及likedislike是否正确? 每当有人单击“喜欢”或“不喜欢”并将其存储在表中时,如果它是对相应ID列的id的回复或评论,我都可以调用存储功能。逻辑对吗?

此外,如果您有任何建议或更好,更有效的方法,请告诉我。 这太长了,所以我就把它留在这里。

修改

也忘了提一下,我不确定我将如何从数据库到刀片计算喜欢的数量并计算它。不具有上述当前结构。另外,如何检查并查看该人是否已喜欢。如果是这样,请勿让他们再次喜欢或不喜欢。一个喜欢的人不能不喜欢。他们只能做一件事。

2 个答案:

答案 0 :(得分:1)

我绝对建议您将评论,回复和喜欢的User与评论和回复相关联。

您可以通过多种方式使用“喜欢”系统来允许访客使用,但是,这很容易解决,最终会使您的“喜欢”统计信息失效。


前进的示例数据库结构为:

评论和答复

  • id
  • post_id //或如果在回复表上则为comment_id
  • user_id
  • 身体
  • 批准
  • (“ _ at”日期)

喜欢

  • id
  • likeable_id //评论或回复的ID
  • likeable_type //评论或回复
  • user_id
  • 喜欢(布尔值)
  • (“ _ at”日期)

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_likenull,则说明他们还不喜欢该评论。

答案 1 :(得分:1)

我看不到对“答复表”的任何需求,只需在评论表中使用 parent_id 。本教程可以帮助您入门Nesting Comments in Laravel