Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.11.2021 06:22:05

Вывод значений

Есть таблица 'services' с перечнем услуг, таблица 'researches' с перечнем исследований и таблица 'researches_services' в которой приводится сопоставление id исследований к id услуги. Так же есть таблица направлений 'referrals' и таблица 'referrals_researches' с сопоставлением направлений и исследований. Дело в том, что в направлениях требуется сделать вывод таким образом, что если имеется такой же набор исследований, идентичный набору исследований для услуги, то выводится наименование услуги из services, если сопоставление не найдено - тогда вывести список исследований. Делаю я это следующим образом:

@foreach($referrals as $referral)
<tr>
       <td style="text-align: center; white-space: pre-wrap;">{{$referral->id}}</td>
       <td style="text-align: center; white-space: pre-wrap;">{{$referral->surname}} {{mb_substr($referral->name, 0, 1)}}. {{mb_substr($referral->patronymic, 0, 1)}}.</td>
       <td style="text-align: center; white-space: pre-wrap;">{{$referral->created_at}}</td>
       @for($i = 0; $i<count($services); $i++)
          @if(($referral->researches->pluck('title')->join(', ')) == ($services[$i]->researches->pluck('title')->join(', ')))
            <td>{{$services[$i]->title}}</td>
          @else
        <td>{{$referral->researches->pluck('title')->join(', ')}}</td>
      @endif
   @endfor
  <td style="text-align: center; white-space: pre-wrap;">{{$referral->researches->sum('price')}} ₽</td>
  <td style="text-align: center; white-space: pre-wrap;">{{$referral->user->surname}} {{mb_substr($referral->user->name, 0, 1)}}. {{mb_substr($referral->user->patronymic, 0, 1)}}.</td>
  <td style="text-align: center;"><a href="{{route('referrals.show', $referral->id)}}" class="text-muted"><i class="fas fa-search"></i></a></td>
<tr>
@endforeach

Но при таком виде происходит дублирование(?) циклов и слетает верстка. Буду признателен за помощь, как всё это сделать правильно?)
Для наглядности, как вышеуказанный код отрабатывает:
1.jpg

Не в сети

#2 25.11.2021 07:07:04

Re: Вывод значений

Сначала оффтопик:
- Неудобно читать код с неправильными отступами.
- Вы же видите, что stylе у вас повторяется. Вынесите его в таблицу стилей, зачем этот визуальный шум?


Ваш подход со сравнением списка исследований неверен. Он может дать как ложно положительный, так и ложно отрицательный результат. Возможно это и случается, поэтому происходит "дублирование" и съезжание верстки из-за лишних колонок. Вы же не выходите из цикла при совпадении, а продолжаете искать дальше и, возможно, ещё раз совпадает и выводится.

По-хорошему надо смотреть буквально оказанную услугу, а не исследования. То есть в направлении должна быть ссылка на услугу. Если она не пустая, то выводите название услуги. Если пустая, то выводите список исследований.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела