计算多对多关系的实例:Laravel

时间:2018-09-02 18:22:20

标签: php laravel-5 eloquent

我有一个数据库设置,您有一个讲师,讲师有多个小组,每个小组有很多学生,一个学生也可以分成许多小组。因此,我分别在讲师和小组之间存在一对多的关系,在学生和小组之间存在一对多的关系。

我想告诉讲师他们总共有多少学生。例如,如果讲师有5个小组,每个小组有5个学生,那么我想显示25个。我尝试了此auth()->user()->userable->groups()->withCount('students'),但我得到了:

  

在null上调用成员函数getRelationExistenceCountQuery()

已编辑,以下是关系:

# user model
class User extends Authenticatable{
   public function userable(){
      return $this->morphTo();
   }
}

# staff/lecturer model
Staff extends Model {
   public function user(){
       return $this->morphOne(User::class, 'userable');
   }

   public function groups(){
      return $this->hasMany(Group::class);
   }
}

#group model
class Group extends Model {
   public function staff(){
      return $this->belongsTo(Staff::class);
   }
   public function students(){
      $this->belongsToMany(Student::class, 'groups_students', 'group_id');
   }
}

# student model
class Student extends Model {
   public function groups(){
       return $this->belongsToMany(Group::class, 'groups_students', 'student_id');
   }
}

获得理想结果的最有效方法是什么?

1 个答案:

答案 0 :(得分:2)

func speakNum(_ num:Int) { let strgNum = String(num) for t in 0...strgNum.count { let index = strgNum.index(strgNum.startIndex, offsetBy:t) //strgnum.index(strgNum.startIndex, offsetBy:t) print(String(strgNum[index])) } } 缺少Group::students()语句:

return

您可以获得这样的学生总数:

public function students(){
   return $this->belongsToMany(Student::class, 'groups_students', 'group_id');
   ^^^^^^
}