我想为我的网站创建一个赞成票和反对票系统,其中唯一的用户可以对一个帖子进行赞成/反对投票,下次他只允许反对者从数据库中退出,之后他再次可以赞成或反对投票.
在这种情况下我有:
用户表:
id
name
辩论桌:
id
post
点赞表:
id
user_id
debate_id
以及类似的否决表:
id
user_id
debate_id
这是管理和跟踪投票和否决票概念的好方法吗?
您可以使用单个表来跟踪
votes
,结构可能是这样的
表:投票
id | user_id | debate_id | vote
这里,
vote
字段可以是tinyInt
,默认为null
。
而且,在
vote
字段中,您只需根据投票类型保留两个不同的值,例如,如果用户投了赞成票,则在 1
字段中插入值 vote
,对于反对票,则插入0
的值。所以,你的桌子可能看起来像这样
id | user_id | debate_id| vote
1 | 10 | 4 | 1 <-- up
2 | 11 | 4 | 0 <-- down
3 | 12 | 4 | 1 <-- up
在这种情况下,两个具有
id = 10
和 id = 12
的用户对帖子进行了投票,其中 debate_id = 4
和另一个具有 user_id = 11
的用户对同一个帖子投了反对票。
在这种情况下,您可以通过计算 vote
字段的值来了解帖子获得了多少赞成票或反对票,例如,您可以使用类似这样的方法来计算 debate_id = 4
的赞成票
$count = Debate::where('debate_id', '=', 4)->where('vote', '=', 1)->count();
此外,您可以使用一些查询范围,这只是一个想法,不可能做出涵盖此范围内所有内容的答案。你应该开始使用一些基本的想法,如果你停留在某个点,那么你可以用你的代码提出特定的问题。
此外,如果您在
votes
表中找到具有特定 debate_id
的用户 ID,则该用户已对此帖子进行投票,要找出投票类型,只需检查 vote
字段 1 or 0
。
我希望只有一个包含投票的表,这可以通过额外的列来完成,例如
is_downvote int(1)
。
看来你还没有尝试太多,这总是负面的。对于这种情况,Laravel Eloquent Documentation 应该足以解决这个问题。
我本来想把这个写成评论,但现在已经很长了。