雄辩的多对多和

Posted

技术标签:

【中文标题】雄辩的多对多和【英文标题】:Eloquent many-to-many sum 【发布时间】:2013-11-15 01:56:16 【问题描述】:

我正在使用 Eloquent 与我的 mysql 数据库通信。我有一张teams 的表,它通过tasks_teamstasks 具有多对多关系。 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】:

找到了potential hint at the Laravel Forums(感谢 bobodan!),试了一下,它成功了。

我的解决方案:

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

【讨论】:

以上是关于雄辩的多对多和的主要内容,如果未能解决你的问题,请参考以下文章

多表关系一对多和多对多

MyBatis一对多和多对多xml配置

雄辩的多对多对多 - 如何轻松加载远距离关系

MySQL——一对多和多对多简单模型建表

MySQL——一对多和多对多简单模型建表

mybatis基础学习5-一对多和多对多(简写)