5

我想为我的网站创建一个赞成和反对票系统,其中唯一用户可以对一个帖子进行赞成/反对,下次他只允许反对者从数据库中退出,之后他可以再次赞成或反对。

在这种情况下,我有:

用户表:

id 
name

辩论表:

id
post

点赞表:

id
user_id
debate_id

和类似的反对表:

id
user_id
debate_id

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

4

2 回答 2

13

我认为,您可以使用单个表来跟踪votes,结构可能是这样的

表:投票

id | user_id | debate_id | vote

在这里,vote字段可能是tinyInt默认值null

并且,在vote字段中,您只需根据投票类型保留两个不同的值,例如,如果用户投票,则1vote字段中插入一个值,对于否决票,插入值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 = 12debate_id = 4user_id = 11votedebate_id = 4

$count = Debate::where('debate_id', '=', 4)->where('vote', '=', 1)->count();

此外,您可以使用一些Query Scope,这只是一个想法,不可能做出涵盖此范围内所有内容的答案。你应该开始使用一些基本的想法,如果你停留在某个点,那么你可能会用你的代码提出具体的问题。

另外,我想提一下,如果您在votes表中找到一个用户 id,debate_id那么该用户已对该帖子进行了投票,并且要找出投票类型,只需检查该vote字段1 or 0

于 2013-11-05T11:54:26.013 回答
3

我希望只有一个包含投票的表格,这可以通过额外的列来完成,例如is_downvote int(1).

似乎您没有尝试太多,这总是负面的。对于这种情况,Laravel Eloquent 文档应该足以解决这个问题。

我本来想把它写成评论,但现在已经很长了。

于 2013-11-05T11:28:15.653 回答