【问题标题】:In need of a logic to create comments in laravel需要在 laravel 中创建评论的逻辑
【发布时间】:2018-12-03 02:21:38
【问题描述】:

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

这就是我目前得到的逻辑。我在正确的轨道上吗(希望这篇文章也可以帮助其他人):

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

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

现在是逻辑:

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

这是表结构:

  1. 评论表

    • 身份证
    • post_id
    • 姓名
    • 电子邮件
    • 评论
    • 已批准
    • 时间戳
  2. 回复表

    • 身份证
    • comment_id
    • 姓名
    • 电子邮件
    • 评论(或回复)
    • 已批准
    • 时间戳
  3. 赞表

    • 身份证
    • comment_id
    • reply_id
    • 喜欢
    • 不喜欢
    • 时间戳

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

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

编辑

还忘了提到我不知道我将如何将喜欢的数量从 db 带到刀片并计算它。不是上面提到的当前结构。另外,如何检查该人是否已经喜欢。如果是这样,不要让他们再次喜欢或不喜欢。喜欢的人不能不喜欢。他们只能做一件事。

【问题讨论】:

  • @RossWilson 例如什么?
  • 客人喜欢/不喜欢的网站之一的示例?
  • 好吧,我错了。我将编辑我的问题。其余的呢?如果我要使用用户模型来喜欢?喜欢或不喜欢后是否需要js禁用按钮?
  • 可能会有客人“喜欢”的外观,但是,这意味着信息存储在用户浏览器中,因此他们需要做的就是添加更多投票是使用不同的浏览器,使用私人标签,或者只是清除他们的存储/cookie。
  • 是的。这与我的想法完全相同。我们可以使用缓存或 cookie 来点赞评论,但如果用户使用多个浏览器或隐身模式,那将毫无用处。我的表结构对吗?如果用户在登录后需要点赞帖子,我需要做什么?

标签: laravel laravel-5 comments laravel-5.6


【解决方案1】:

我绝对会推荐关联 cmets、回复和喜欢 User,您几乎已经在使用 cmets 和回复。

您可以通过多种方式建立一个允许访客使用的“点赞”系统,但是,这很容易绕过,最终会使您的“点赞”统计数据变得毫无用处。


未来的数据库结构示例如下:

cmets 和回复

  • 身份证
  • post_id // 如果在回复表中,则为 comment_id
  • user_id
  • 身体
  • 已批准
  • (“_at”日期)

喜欢

  • 身份证
  • 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();

您可以通过多种不同的方式检查当前身份验证用户是否喜欢某个帖子,一个示例是建立单独的关系,以便您可以急切地加载结果:

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

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

【讨论】:

  • 这正是我想要的。详细而完美。我会试试这个,让你知道我是否需要其他任何东西。但与此同时,让我们暂时放下编程方面。允许来宾用户添加 cmets 并从后端批准它是一个明智的主意吗?并喜欢/不喜欢,登录。因为根据用户体验,没有多少人愿意花时间注册只是为了发表评论。
  • @PICKAB00 从您问题中的表格来看,无论如何您都会从他们那里得到nameemail。您始终可以将其设置为使user_id 可以是null(然后您需要通过链接whereNotNull('user_id') 来更新authUserLike 关系)。拥有来宾 cmets 并没有什么问题,但是,一个缺点是,如果您没有获得 email 地址,那么您将无法将评论与用户联系起来(如果他们曾经设置过)一个帐户。过了那个点,如果它对你有意义,那就去吧。
  • 谢谢。这很有帮助。我将能够从这里携带它。你已经提供了足够多的信息。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2016-08-17
    • 2012-05-09
    • 2010-12-22
    相关资源
    最近更新 更多