从 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');
}
我有两个 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');
}