Laravel 雄辩中的赞成票和反对票

问题描述 投票:0回答:2

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

在这种情况下我有:

用户表:

id 
name

辩论桌:

id
post

点赞表:

id
user_id
debate_id

以及类似的否决表:

id
user_id
debate_id

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

php mysql laravel eloquent
2个回答
13
投票

您可以使用单个表来跟踪

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();

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

此外,如果您在

votes
表中找到具有特定
debate_id
的用户 ID,则该用户已对此帖子进行投票,要找出投票类型,只需检查
vote
字段
1 or 0


3
投票

我希望只有一个包含投票的表,这可以通过额外的列来完成,例如

is_downvote int(1)

看来你还没有尝试太多,这总是负面的。对于这种情况,Laravel Eloquent Documentation 应该足以解决这个问题。

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

© www.soinside.com 2019 - 2024. All rights reserved.