Laravel HasMany通过关联表上的条件与条件的关系

问题描述

我想获取一个基于医院(医生工作所在的城市)的经过验证的医生的人数。我在“城市”模式中创建了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模型之间的关系名称

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...