Laravel Blade Sum 函数不计算负数
Posted
技术标签:
【中文标题】Laravel Blade Sum 函数不计算负数【英文标题】:Laravel Blade Sum function not counting negative numbers 【发布时间】: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 的所有记录。我认为下面的答案是在说同样的事情。
【参考方案1】:
我认为你的问题可能在这里:
public function votes()
return $this->hasMany('App\SubmissionVote', 'vote');
vote
不是外键,它恰好对这两个起作用,因为我猜投票是 1,提交是 1。但是对于负数,它将不起作用。
因此,您可能希望将其更改为 submission_id
,而不是不能是外键的 vote
,因此:
public function votes()
return $this->hasMany('App\SubmissionVote', 'submission_id');
在 SubmissionVote 模型中,您将拥有:
public function submission()
return $this->belongsTo('App\Submission');
【讨论】:
"恰好对这两个起作用,因为投票是 1,提交是 1" 完全正确。谢谢!以上是关于Laravel Blade Sum 函数不计算负数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 4 的 Blade.php 模板中使用静态函数?