Laravel 在雄辩的ORM中,如何定义用户和点之间的关系

Laravel 在雄辩的ORM中,如何定义用户和点之间的关系,laravel,eloquent,Laravel,Eloquent,我有三张桌子: 用户-用于存储用户 用户点-用于用户和点之间的关联(仅具有用户id和点id) 用于描述积分的积分(id、金额、描述) 我如何定义它们之间的关系?我试过了 public function points(){ return $this->belongsToMany('\App\Point', 'user_point'); } 但当我这么做的时候 return $user->points()->sum('amount'); 它只返回一个 编辑: 起

我有三张桌子:

  • 用户-用于存储用户
  • 用户点-用于用户和点之间的关联(仅具有用户id和点id)
  • 用于描述积分的积分(id、金额、描述)
我如何定义它们之间的关系?我试过了

 public function points(){
    return $this->belongsToMany('\App\Point', 'user_point');
}
但当我这么做的时候

return $user->points()->sum('amount'); 
它只返回一个

编辑: 起初我试着这样做,因为这样做更有意义:

 public function points(){
        return $this->hasMany('\App\Point');
    }

但是它不起作用

SUM
是一个聚合函数,因此它应该只返回一行

$user->points
将是附加到该用户的点的集合


$user->points()
是一个查询,您可以对其执行额外的工作(即
$user->points()->whereSomething(true)->get()
)。

正如用户ceejayoz指出的那样,使用
user->points()
将返回一个生成器,您可以对其执行额外的工作。我相信在上面使用
sum()
可以查看返回的第一行,这就是您所指出的实际发生的情况

很可能,您真正想要做的是
$user->points->sum('amount')


这将得到整个集合中该列的总和。

嘿,我的$user变量是一个选定的用户,因此如果我想得到他的点数总和,我将执行$user->points()->sum('amount');我所说的1是指错误的和,不是一行。我的问题是-它只找到user_id=7和point_id=1,但我想要user_id=7和所有point_id