从 laravel 多对多关系访问值

Accessing values from laravel Many to Many relationship

我有两个 table 的医生和专业以及一个枢轴 table doctor_specialities。

在医生模型中,我定义了这样的关系-

public function specializations(){
    return $this->belongsToMany('App\Specialization', 'doctor_specialities', 'speciality_id', 'doctor_id');
}

而在Specialization模型中,关系是这样的-

public function doctors(){
    return $this->belongsToMany('App\Doctor', 'doctor_specialities', 'speciality_id', 'doctor_id');
}

我得到了所有这样的专业的医生-

$doctors = Specialization::find($request->specialization)->doctors
                            ->where('city_id', $request->city);

一切正常。我得到正确的输出。

但现在我想打印每个医生的所有专业,但它返回一个空数组。

foreach ($doctors as $doctor) {
    var_dump($doctor->specializations);
}

我得到的输出是-

object(Illuminate\Database\Eloquent\Collection)[218]
  protected 'items' => 
    array (size=0)
      empty

如何打印每位医生的专长??

您确定要找一个医生吗?查询专业化时如何获得单身医生?

$specialization = Specialization::find($request->specialization)->doctors
                        ->where('city_id', $request->city);

我猜你不清楚你想要达到的目标?

如果你想要一个特定专业的医生,你应该这样做;

    $specialization = Specialization::with(['doctors' => function ($query) {
                             $query->where('city_id', $request->city);
                         }])->find( $request->specialization);

并遍历医生

foreach($specialization->doctors as $doctor){
do what ever you want
}

对于您更新的问题,在 Doctor 模型上定义专业化关系时,第三个参数是您在其上定义关系的模型的外键名称(在您的情况下是 Doctor),而第四个参数是您要加入的模型的外键名称(专业化)。关系应定义如下:

public function specializations(){
    return $this->belongsToMany('App\Specialization', 'doctor_specialities', 'doctor_id', 'speciality_id');
}

请参考documentation here.