Вы можете попробовать что-то подобное. Я не знаю названий атрибутов, которые вы используете, поэтому я использовал свои.
$sum = 0;
$count = 0;
foreach($doctor->appointments as $appointment){
if($appointment->isComplete){
$count++;
$sum += $appointment->rating->value;
}
}
$avg = $sum / $count;
L oop по назначению врача, для каждого посещения проверяйте, завершено ли оно, получите значение его рейтинга.
Вы можете создать функцию в модели Доктора с именем rating, имеющую этот лог c.
ИЛИ
Вы можете использовать соотношение hasManyThrough
. hasManyThrough - Laravel
Я не уверен, применимо ли это, когда модель имеет отношение "многие ко многим" с промежуточной таблицей или нет ... но вы можете попробовать .