我想为我的网站创建一个投票和投票系统,其中一个独特的用户可以在一个帖子上/下投票,下次他只允许相反从数据库下车,然后他再次可以启动或者投票。
在这种情况下,我有:
用户表:
id
name
辩论表:
id
post
upvotes table:
id
user_id
debate_id
和类似的downvote表:
id
user_id
debate_id
这是管理和跟踪投票和投票概念的好方法吗?
答案 0 :(得分:10)
我认为,您可以使用单个表来跟踪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();
另外,你可以使用Query Scope这个东西,这只是一个想法,并且不可能做出涵盖这个范围内所有内容的答案。你应该开始使用一些基本的想法,如果你坚持某一点,那么你可以用你的代码提出具体的问题。
另外,我想提一下,如果您在votes
表中找到具有某个debate_id
的用户ID,则该用户已对该帖子进行投票并找出投票类型,只需查看vote
字段1 or 0
。
答案 1 :(得分:3)
我希望只有一个包含投票的表格,这可以使用额外的列来完成,例如is_downvote int(1)
。
似乎你没有尝试过多次总是消极的。对于这种情况,Laravel Eloquent Documentation应该足以解决这个问题。
我会把它写成评论,但现在它很长。