雄辩的多对多总和

时间:2013-11-15 01:56:17

标签: php mysql sql eloquent

我正在使用Eloquent与我的MySql数据库交谈。我有一张teams表,与tasks通过tasks_teams建立了多对多关系。 tasks有一个名为points的列。当团队完成任务时,他们可以获得积分。

我想给Team对象一个方法来返回团队获得的总积分。此查询的SQL是:

SELECT SUM(points) FROM tasks_teams, tasks WHERE
    team_id = 1
AND tasks_teams.task_id = tasks.id;

这是我的Team型号:

class Team extends Illuminate\Database\Eloquent\Model {
    protected $table = 'teams';

    public function tasks () {
        return $this->belongsToMany( 'Task', 'tasks_teams');
    }
}

我想将此方法添加到Team,但它不起作用:

public function points() {
    return $this->tasks->sum('points');
}

但我明白了:

  

致命错误:在第19行的[/] / Models / Team.php中调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: sum()

我在这里弄错了什么?

1 个答案:

答案 0 :(得分:0)

找到了potential hint at the Laravel Forums(感谢bobodan!),尝试过它并且有效。

我的解决方案:

public function points() {
    return $this->belongsToMany( 'Task', 'tasks_teams' )->sum('points');
}