【问题标题】:Laravel Blade Sum function not counting negative numbersLaravel Blade Sum 函数不计算负数
【发布时间】: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 的所有记录。我认为下面的答案是在说同样的事情。

标签: php laravel


【解决方案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" 完全正确。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2021-05-26
  • 2018-03-13
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 2023-02-16
相关资源
最近更新 更多