Laravel: Doctor hasMany Appointments and appontment hasOne rating, 如何获得医生等级

Laravel: Doctor hasMany Appointments and appontment hasOne rating, How to get Doctor rating

我有医生 table 与约会 table 的关系,医生可以有很多约会。约会table与评级的关系,一个约会(只完成)可以有评级。 我想要所有预约医生的平均评分。例如,一位医生有 10 次预约,其中 5 次已完成并且评分为 3、4、1、3、4 我想显示医生的评级作为示例结果 3 平均率。

我该怎么做?

你可以尝试类似的东西。我不知道您使用的属性的名称,所以我使用了我的。

$sum = 0;
$count = 0; 

foreach($doctor->appointments as $appointment){
    if($appointment->isComplete){
        $count++;
        $sum += $appointment->rating->value;
    }
}

$avg = $sum / $count;

循环医生预约,对于每个预约,检查它是否完成,获取其评分值。

您可以在 Doctor 模型中创建一个具有此逻辑的名为 rating 的函数。

您可以使用 hasManyThrough 关系。 hasManyThrough - Laravel

我不确定它是否适用于模型与中间体 table 或不具有一对多关系时..但你可以试一试。