Laravel HasManyThrough 与 Where 条件相关的关系 table
Laravel HasManyThrough Relation with Where Condition on related table
我想根据医院(医生工作的地方)计算一个城市的 已验证医生 的数量。我在城市模式中创建了 hasManythrough 关系,当我在 blade 文件 中使用此关系时,它会提供所有医生(已验证和未验证)。我只想得到经过验证的医生。这是我的数据库结构:
数据库
医生(列) ---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();
在blade文件中我用
@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
(with):
$cities = City::with(['cityDoctors' => function ($query) {
$query->whereHas('doctor', function ($query) {
$query->where('is_verified', true);
});
}])->has('cityDoctors')->get();
确定 CityDoctor 和 Doctor 模型之间的关系名称
我想根据医院(医生工作的地方)计算一个城市的 已验证医生 的数量。我在城市模式中创建了 hasManythrough 关系,当我在 blade 文件 中使用此关系时,它会提供所有医生(已验证和未验证)。我只想得到经过验证的医生。这是我的数据库结构:
数据库
医生(列) ---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();
在blade文件中我用
@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
(with):
$cities = City::with(['cityDoctors' => function ($query) {
$query->whereHas('doctor', function ($query) {
$query->where('is_verified', true);
});
}])->has('cityDoctors')->get();
确定 CityDoctor 和 Doctor 模型之间的关系名称