Laravel таблица показывает уникальный идентификатор несколько раз - PullRequest
0 голосов
/ 05 марта 2020

В моем проекте laravel я беру данные из нескольких таблиц и показываю их в виде.

Я загрузил изображение текущего выхода.

У меня есть несколько служб в одном идентификаторе местоположения, но я хочу показать только один идентификатор местоположения и соответствующие им сервисы в правой части.

Ниже приведен мой код в контроллер

public function showClinicLocations($id)
    {
        $clinic = Clinic::find($id);
        $locations = Location::where('clinicID', $id)->get();
        $locationservices = Service::select('services.serviceName as servicename','locations.locationID as locid') 
        ->join('location_services', 'location_services.serviceID', '=', 'services.serviceID')
        ->join('locations', 'locations.locationID', '=', 'location_services.locationID') 
        ->join('clinics', 'clinics.clinicID', '=', 'locations.clinicID') 
        ->where('clinics.clinicID','=',$id) 
        ->get();
        return view('clinic.locations')->with(['locations' =>  $locations  ,'clinic'=>$clinic , 'services'=> $locationservices]);
    }

Ниже приведен код в страница просмотра

<table>
                                       <thead>
                                           <tr>
                                               <th>Location Name</th>
                                               <th>Services</th>
                                           </tr>
                                       </thead>
                                       <tbody>
                                       @foreach($services as $service)
                                           <tr>
                                               <td>{!! $service->locid !!}</td>
                                               <td>{!! $service->servicename !!}</td>
                                           </tr>
                                        @endforeach
                                       </tbody>
                                   </table>

Я хочу показать только один уникальный locid и их сервисы в одном ряду, почему я не получаю вот так

И мой ожидаемый результат - на данном изображении

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

На данный момент ваш результат запроса будет разделен, потому что вы не сгруппировали их.

Вот пример

        $locationservices = Service::select(DB::raw("GROUP_CONCAT(services.serviceName SEPERATOR ',') as servicename, locations.locationID as locid") 
        ->join('location_services', 'location_services.serviceID', '=', 'services.serviceID')
        ->join('locations', 'locations.locationID', '=', 'location_services.locationID') 
        ->join('clinics', 'clinics.clinicID', '=', 'locations.clinicID') 
        ->where('clinics.clinicID','=',$id) 
        ->groupBy('locations.locationID')
        ->get();

Если сгруппировать по имеет ошибку просто добавьте имя_службы

        ->groupBy('locations.locationID', 'services.serviceName')

, тогда представление будет таким же.

Вы можете изменить разделитель на что угодно.

Надеюсь, это поможет.

0 голосов
/ 05 марта 2020

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

<tbody>
@foreach($locations as $location)
  <tr>
    <?php 
        $first = true;
        foreach($services as $service){
            echo('<tr>')
            if($service->locid == $location->locationID ){
                if($first){
                    echo('<td class="first">' . $location->locationID . '</td>')
                    $first=false;
                }
                else{
                    echo('<td class="second"></td>')
                }
                echo('<td>'.$service->servicename.'</td>') 
                echo('<td><button id="btn_'.$service->serviceID.'">Delete</button></td>')
            }
            echo('</tr>')
        }
    ?>
    </td>
   </tr>
@endforeach
</tbody>

Чтобы стереть линии, вам придется добавить некоторые CSS:

.first{
    border-top: 1px solid black;
    border-right: 1px solid black;
    border-left: 1px solid black;
}

.second{
    border-right: 1px solid black;
    border-left: 1px solid black;
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...