需要在 laravel 中创建评论的逻辑

In need of a logic to create comments in laravel

好的,基础是我希望能够对我的每个 post 发表评论。每个评论都有一个回复按钮。它不是多线程的,所以一条评论会有很多回复。那些回复不会有回复。我也希望能够喜欢和不喜欢 comment/reply。所有这些都不会绑定到用户模型或任何此类模型。 public 访问者将能够添加评论和回复评论,但需要批准。

这是我到目前为止的逻辑。我的方向是否正确(希望这个 post 也能帮助其他人):

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

所以关系是: comments 会有很多 repliesreplies 属于一个 comment replies & comments 会有很多 likes

现在是逻辑:

我会用AJAX调用CommentController上的存储函数来存储评论。我将调用 ReplyController 上的存储函数来存储回复。至于点赞,LikeController store function 会存储评论和回复的点赞数。

这里是 table 结构:

  1. 评论table

    • id
    • post_id
    • 名字
    • 电子邮件
    • 评论
    • 批准
    • 时间戳
  2. 回复table

    • id
    • comment_id
    • 姓名
    • 电子邮件
    • 评论(或回复)
    • 批准
    • 时间戳
  3. 赞table

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

现在我不明白的是,喜欢table。 comment_idreply_id 以及 likedislike 是否正确? 每次有人点击喜欢或不喜欢时,我都可以调用存储功能并将其存储在 table 中,如果它是回复或评论,则更新该列 id 到相应的 id 列。逻辑对吗?

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

编辑

还忘了说,我不确定我将如何从 db 到 blade 获取喜欢的数量并计算它。不适用于上述当前结构。另外,如何检查并查看此人是否已经喜欢。如果是这样,不要让他们再次喜欢或不喜欢。喜欢的人不能不喜欢。他们只能做一件事。

我肯定会建议将评论、回复和点赞关联到 User,您几乎已经在处理评论和回复了。

您可以通过多种方式拥有一个允许访客使用的 "liking" 系统,但是,这很容易绕过并最终使您的 "like" 统计数据无用。


一个示例数据库结构将是:

评论和回复

  • id
  • post_id // 或 comment_id 如果回复 table
  • user_id
  • 正文
  • 批准
  • (“_在”个日期)

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

likes table 设置为用作 Polymorphic 关系,例如在您的 Comment 模型中:

public function likes()
{
    return $this->morphMany(Like::class, 'likeable');
}

然后添加一个喜欢你会像这样:

$like = new Like(['user_id' => auth()->user()->id, 'liked' => true]); 
$comment->likes()->save();

然后您可以通过多种不同的方式检查当前授权用户是否喜欢 post,一个示例是建立单独的关系,以便您可以预先加载结果:

public function authUserLike()
{
    return $this->morphOne(Like::class, 'likeable')->where('user_id', auth()->id());
}

那么如果 auth_user_likenull 他们还没有喜欢那个评论。

我认为不需要回复 Table 只需在评论 table 中使用 parent_id。本教程可能会帮助您入门 Nesting Comments in Laravel