在Laravel雄辩中投票和投票

Sag*_*dal 4 php mysql laravel eloquent

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

在这种情况下,我有:

用户表:

id 
name
Run Code Online (Sandbox Code Playgroud)

辩论表:

id
post
Run Code Online (Sandbox Code Playgroud)

upvotes表:

id
user_id
debate_id
Run Code Online (Sandbox Code Playgroud)

和类似的downvote表:

id
user_id
debate_id
Run Code Online (Sandbox Code Playgroud)

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

The*_*pha 12

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

表:投票

id | user_id | debate_id | vote
Run Code Online (Sandbox Code Playgroud)

在这里,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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,两个用户id = 10id = 12以上投票的帖子debate_id = 4和另一个用户user_id = 11在同一帖子上投票.在这种情况下,您可以通过计算vote字段的值来查看帖子获得的票数是多少,例如,您可以计算debate_id = 4使用此类内容的票数

$count = Debate::where('debate_id', '=', 4)->where('vote', '=', 1)->count();
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用查询范围,这只是一个想法,并不可能做出涵盖此范围内所有内容的答案.你应该开始使用一些基本的想法,如果你坚持某一点,那么你可以用你的代码询问具体的问题.

另外,我想提一下,如果你在votes表格中找到一个用户ID,debate_id那么这个用户已经对这篇文章进行了投票并找到了投票类型,只需检查该vote字段即可1 or 0.

  • 虽然你可以做得更好 - 使用一个无符号的tinyint,其中downvote为-1,投票为1,那么你可以通过```total = SUM(vote)```轻松获得总得分. (2认同)