Laravel - 对链表的列进行求和?

时间:2017-04-24 21:33:01

标签: php mysql laravel

我有一个Laravel 5.4项目,我试图在连接表的列中进行求和,同时尽可能保持laravel的雄辩。

以下是我正在使用的两个模型:

电影模型已连接到电影'数据库中充满电影和电影数据的表:

Movie.php

class Movie extends Model
{

  public function votes()
  {
    return $this->hasMany(MovieVote::class, 'movie_id');
  }
}

MovieVote与电影'电影有关。表与外键' movies_votes'并包含该电影的投票。向上投票为1,向下投票为-1。

MovieVote.php

class MovieVote extends Model
{
  /**
 * The attributes that are mass assignable.
 *
 * @var array
 */

  protected $table = 'movie_votes';

  protected $fillable = ['user_id', 'movie_id', 'vote';

  public function movie()
  {
    return $this->belongsTo('App\Movie');
  }

在这一点上,对我来说一切都非常简单,我可以在修补程序中进行雄辩的查询,例如

$movie = App\Movie::find(106)
$movie->votes

这显示了我的结果。我非常喜欢这种方便。

=> Illuminate\Database\Eloquent\Collection {#688
     all: [
       App\MovieVote {#687
         id: 1,
         user_id: 1,
         movie_id: 106,
         vote: 1,
         created_at: "2017-04-23 03:32:29",
         updated_at: "2017-04-23 03:32:30",
       },
       App\MovieVote {#104
         id: 27,
         user_id: 2,
         movie_id: 106,
         vote: -1,
         created_at: "2017-04-23 04:12:51",
         updated_at: "2017-04-23 04:12:52",
       },
     ],
   }

我的问题虽然......

如何将所有电影投放到'投票'总和大于1,同时保持一切作为一个雄辩的集合,所以我可以在我的视图中使用诸如$ movie-> title之类的参数?

我已经尝试了一些"其他"诸如循环和计票之类的方式,将它们添加到数组等等,但我失去了所有的雄辩,所以我必须遗漏一些东西......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

前一段时间我使用Slim PHP Framework和Eloquent遇到了同样的问题。但解决方案大致相同。

您可以将范围与selectRaw一起使用。

请参阅我的回答:https://stackoverflow.com/a/43139953/1568059