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 8)Blade 模板文件调用函数

如何在 laravel 4 的 Blade.php 模板中使用静态函数?

Laravel Blade 使用自定义函数

使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分

laravel 5 中的 .blade 扩展不起作用?

laravel-模板引擎Blade