Laravel Запрос на объединение не работает для 4 таблиц - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть 4 таблицы

Название таблицы: Clinics

Поля: clinicID, clinicName

Имя таблицы: location

Файлы: locationID, clinicID, locationname

Имя таблицы: Services

Поля: ServiceId, ServiceName

Имя таблицы: LocationServices

Поля: locationServiceID, locationID, ServiceId

Мое требование заключается в том, что когда я передаю clinicID, мне нужно получить соответствующее имя службы соответствующей клиники, может быть больше одного.

Но когда я попробовал, запрос на соединение не работает. Ниже приведен мой код в контроллере

 public function showClinic($id)
    {
        $clinic = Clinic::find($id);
        $locations = Location::where('clinicID', $id)->get();
        $locationsservices=\App\Clinic::with('locations');
        var_dump($locationsservices);
        die();
        return view('clinic.show')->with(['locations' =>  $locations  ,'clinic'=>$clinic]);

    }

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Вы можете получить эту информацию, используя отношения. В модели Clinic добавьте

public function locations()
 {
    return $this->belongsTo('App\Models\Locations','clinicID','clinicID');
 }

В модели Locations добавьте

 public function location_services()
 {
    return $this->hasOne('App\Models\LocationServices','locationID','locationID');
 }

На модели LocationServices,

 public function services()
 {
    return $this->hasOne('App\Models\Services','ServiceId','ServiceId');
 }

Вы можете получить результат,

$clinic_info = Clinic::find($id);
if(isset($clinic_info->locations))
{
  if(isset($clinic_info->locations->location_services))
  {
    if(isset($clinic_info->locations->location_services->services))
    {
      echo $clinic_info->locations->location_services->services->ServiceName;
    }
  }  
}
0 голосов
/ 26 февраля 2020

Ссылка Может быть полезна для вас

Multi Joins

$data = DB::table('city')
       ->join('state', 'state.state_id', '=', 'city.state_id')
       ->join('country', 'country.country_id', '=', 'state.country_id')
       ->select('country.country_name', 'state.state_name', 'city.city_name')
       ->get();
     return view('join_table', compact('data'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...