【发布时间】:2019-11-15 11:57:35
【问题描述】:
我的网站有提交,这些提交有投票。
Upvotes 存储在 SubmissionVotes 表中的“vote”列中的 tinyint 为 1,downvotes 存储为 -1。
在我的Submission.php 模型中,与投票模型存在 hasMany 关系。
public function votes() {
return $this->hasMany('App\SubmissionVote', 'vote');
}
在我的刀片模板中,我计算了这些投票的总和:
{{ $submission->votes->sum('vote') }}
现在,如果只有赞成票,这可以正常工作。三个赞成票将返回 3 分。
但是给定 3 个反对票和 3 个赞成票,总和应该返回 0 但是,它返回 3。
换句话说,它把 -1 算作 0。
编辑:
奇怪的发展。当我查看 $submission->votes 返回的内容时,它只会给我正数的结果。
例如:
[{"id":13,"user_id":2,"submission_id":1,"vote":1},{"id":22,"user_id":3,"submission_id":1,"投票”:1}]
【问题讨论】:
-
如果你尝试这个:
collect([-1, 2, -2])->sum()结果是-1,这是正确的,所以请确保你有你期望的值。检查$submission->votes可能在您的控制器中返回什么,如果结果符合您的预期,请先手动查看。 -
真的很奇怪!当我查看
$submission->votes它返回[{"id":13,"user_id":2,"submission_id":1,"vote":1},{"id":22,"user_id":3,"submission_id":1,"vote":1}]等,但它只返回投票= 1 的结果,而不是投票= -1 的结果 -
在你的数据库中你能看到所有的记录吗?如何查询记录?
-
@nakov 是的。我编辑了主要帖子以反映这一点
-
vote不应该是关系的外键。它可能会起作用,因为$submission->id将是 1,并且它会返回vote为 1 的所有记录。我认为下面的答案是在说同样的事情。