如何使用雄辩与不直接连接在拉拉维尔访问表

我有下表结构,我想访问分配给特定病例但使用患者信息的门户。例如,我有以下查询


$data['patients'] = Patient::with('operator')->where('case_id', $case_id)->get();

此查询返回分配给患者的操作员,现在我想要将门户名称分配给使用案例的患者。


门户表


id   Name   

1   A

2   B


id     Name    case_number     patient_name     user_id     portal_id

1      Farz       456            sania             5           1    

病人


id    case_id   operator_id

2     456            5      


HUH函数
浏览 97回答 3
3回答

白衣染霜花

假设您正确地创建了 、 和 模型之间的 laravel 关系,则可以通过以下方式访问:PortalCasePatientOperator// you get Case model$case = \App\Case::findOrFail($case_id);// patients: there is a hasMany relationship between Case and Patient models$data['patients'] = $case->patients;// there is a belongsTo relationship between Case and Portal models$portal_name = $case->portal->Name;

慕森王

你必须使用另一种关系$data['patients'] = Patient::with('operator', 'cases.portal')                             ->get();在病人中 :public function cases(){    return $this->hasMany(Case::class);}倘:public function portal(){    return $this->belongsTo(Portal::class);}然后您可以使用以下命令访问它:foreach($data['patients'] as $patient){    foreach($patient->cases as case){         $var = $case->name;    }}或者,如果您只想要所有门户名称:$portals_names = $data['patient'][0]->pluck('cases.portal.name')

拉风的咖菲猫

Normaly,如果您在模型中执行了正确的关系,则只能使用:$data['patients'] = Patient::with('operator')->where('case_id', $case_id)->get();$portals = [];foreach ($data['patients'] as $patient) {    foreach ($patient->cases as $case) {        $portals []= $case->portal;    }}我想在患者和病例之间有一个,在病例和门户之间有一个?HasManyBelongTo如果要延迟加载数据,可以尝试:$data['patients'] = Patient::with(['operator', 'cases.portal'])->where('case_id', $case_id)->get();
打开App,查看更多内容
随时随地看视频慕课网APP