我想为我的网站创建一个赞成和反对票系统,其中唯一用户可以对一个帖子进行赞成/反对,下次他只允许反对者从数据库中退出,之后他可以再次赞成或反对。
在这种情况下,我有:
用户表:
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();
此外,您可以使用一些Query Scope,这只是一个想法,不可能做出涵盖此范围内所有内容的答案。你应该开始使用一些基本的想法,如果你停留在某个点,那么你可能会用你的代码提出具体的问题。
另外,我想提一下,如果您在votes
表中找到一个用户 id,debate_id
那么该用户已对该帖子进行了投票,并且要找出投票类型,只需检查该vote
字段1 or 0
。
我希望只有一个包含投票的表格,这可以通过额外的列来完成,例如is_downvote int(1)
.
似乎您没有尝试太多,这总是负面的。对于这种情况,Laravel Eloquent 文档应该足以解决这个问题。
我本来想把它写成评论,但现在已经很长了。