Подсчитать случаи отношения многих ко многим - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть настройка базы данных, в которой у вас есть лектор, имеющий много групп, и в каждой группе много студентов, а также студент может быть во многих группах. Поэтому у меня есть отношения один ко многим между лектором и группами (соответственно) и отношения многие ко многим между студентами и группами.

Я хочу показать лектору, сколько у них студентов в целом. Например, если у лектора 5 групп по 5 студентов в каждой, то я хочу показать 25. Я попробовал это auth()->user()->userable->groups()->withCount('students'), но я получил это:

Вызов функции-члена getRelationExistenceCountQuery () со значением NULL

Отредактировано, вот отношения:

# 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 голосов
/ 03 сентября 2018

Group::students() отсутствует оператор return:

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

Вы можете получить общее количество студентов, таких как:

$groups = auth()->user()->userable->groups()->withCount('students')->pluck('students_count');
$count = $groups->sum();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...