问题描述
我想获取一个基于医院(医生工作所在的城市)的经过验证的医生的人数。我在“城市”模式中创建了hasManythrough关系,当我在刀片文件中使用此关系时,它将为所有医生(已验证和未验证)提供帮助。我只想找经过验证的医生。这是我的数据库结构:
医生(列) --- id--name --- is_verified-
医院列) --- id--city_id --- name ---
doctor_hospitals(列) –id--hospital_id --- doctor_id
城市模式中的关系
public function cityDoctors()
{
return $this->hasManyThrough(
'App\DoctorHospital','App\Hospital','city_id','hospital_id'
);
}
在控制器中
$cities=City::with('cityDoctors')->whereHas('cityDoctors')->get();
在刀片文件中我使用
@foreach($cities as $city)
<li><a href="{{route('typeSearch',['type' => 'city','id' => $city->id])}}">
<strong>{{$city->cityDoctors->count()}}</strong>{{$city->name}}</a>
</li>
@endforeach
显示所有医生的人数(已验证和未验证)。 如何仅获得经过验证的城市医生?
解决方法
这就像是多对多的关系,而不是很多的事情。
无论如何,您都可以在热切的加载语句(带有)中使用whereHas
:
$cities = City::with(['cityDoctors' => function ($query) {
$query->whereHas('doctor',function ($query) {
$query->where('is_verified',true);
});
}])->has('cityDoctors')->get();
确保CityDoctor和Doctor模型之间的关系名称