在Laravel雄辩中投票和投票

时间:2013-11-05 11:17:36

标签: php mysql laravel eloquent

我想为我的网站创建一个投票和投票系统,其中一个独特的用户可以在一个帖子上/下投票,下次他只允许相反从数据库下车,然后他再次可以启动或者投票。

在这种情况下,我有:

用户表:

id 
name

辩论表:

id
post

upvotes table:

id
user_id
debate_id

和类似的downvote表:

id
user_id
debate_id

这是管理和跟踪投票和投票概念的好方法吗?

2 个答案:

答案 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 = 10id = 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应该足以解决这个问题。

我会把它写成评论,但现在它很长。