我想根据医院(医生工作的地方(统计城市的验证医生。我在城市模式中创建了hasManythrough关系,当我在刀片文件中使用此关系时,它会向所有医生提供(已验证和未验证(。我只想找经过验证的医生。这是我的数据库结构:
数据库
医生(列(--id--名称--is_verified-
医院列(--id--city_id--name---
医生_医院(列(--id--hospital_id--doctor_id
城市模式中的关系
public function cityDoctors()
{
return $this->hasManyThrough(
'AppDoctorHospital',
'AppHospital',
'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
它显示所有医生的计数(已验证和未验证(。如何只获取城市的认证医生
这就像多对多关系,而不是多掷。
无论如何,您可以在热切加载语句(with(中使用whereHas
:
$cities = City::with(['cityDoctors' => function ($query) {
$query->whereHas('doctor', function ($query) {
$query->where('is_verified', true);
});
}])->has('cityDoctors')->get();
确保CityDoctor和Doctor型号之间的关系名称