Как узнать количество каждого типа регистрации? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть этот запрос:

 public function payment($id = "", $slug = "", $regID)
{
    $registrationTypeDetails = Registration::with(['participants.registration_type',
        'participants' => function ($query) use ($regID) {
            $query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
        }
    ])->find($regID);

    return view('conferences.showSummary', compact( 'registrationTypeDetails'));

}

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

Итак, $ registrationTypeDetails показывает:

Registration {#259 ▼
...
  #relations: array:1 [▼
    "participants" => Collection {#263 ▼
      #items: array:2 [▼
        0 => Participant {#270 ▼
         ...
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#276 ▼
              ....
              #attributes: array:12 [▼
                "id" => 2
                "name" => "free"
                "price" => 0
                "conference_id" => 2
              ]
              ...
            }
          ]
         ...
        }
        1 => Participant {#272 ▼
          ...
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#278 ▼
            ...
              #attributes: array:12 [▼
                "id" => 3
                "name" => "paid"
                "price" => 1
                "conference_id," => 2
              ]
             ...
            }
          ]
        }
      ]
    }
  ]
...
}

С помощью этого запроса я хочу показать в представлении регистрациюназвание типа, цена, количество и подытог.Название и цена уже работают с кодом ниже.

Сомнение: Но знаете ли вы, как получить количество и промежуточный итог для каждого типа регистрации?Например, если регистрация состоит из 3 участников, 2 участника зарегистрированы в типе регистрации «общая» и 1 в типе регистрации «плюс». Я хочу показать количество 2 для типа регистрации «общее» и количество 1 для регистрациивведите "плюс", например:

  @foreach($registrationTypeDetails->participants as $participant)
<li class="list-group-item list-group-registration d-flex align-items-center justify-content-between">
    <span class="font-size-sm"> {{$participant->registration_type['name']}} </span>
    <span class="font-size-sm">{{$participant->registration_type['price']}} </span>
    <!--<span class="font-size-sm">how to show the quantity? (ex: 2) </span>-->
    <!--<span class="font-size-sm">how to show the subtotal? (ex: 4$)</span>-->
    </li>
@endforeach

1 Ответ

0 голосов
/ 09 июня 2018

Мне кажется, я понимаю: вы пытаетесь показать общее количество типов регистрации по участнику и показать общее количество этих типов регистрации при переходе по странице.Если вы не хотите менять цикл на тип регистрации, я думаю, вы можете сделать это:

Я бы порекомендовал сохранить ваш запрос и создать пару переменных в контроллере только для регистрации.подсчитывает количество типов и отправляет их также из контроллера в представление.

$general_type_count = 0;
$plus_type_count = 0;
foreach($registrationTypeDetails->participants as $p){
    if($p->registration_type['name'] === 'general')
       $general_type_count ++;
    if($p->registration_type['name'] === 'plus')
       $plus_type_count ++;
}

Как только в представлении будет подсчитано количество типов регистрации, добавьте переменные в верхней части цикла, чтобы подсчитать каждый тип при его нажатии(это будет промежуточный итог для типа).Это не очень хорошее разделение кода от представления ... но это довольно пуленепробиваемое доказательство:

<?php $plus = 0; $general = 0; ?>
@foreach($registrationTypeDetails->participants as $participant)
  <li class="list-group-item list-group-registration d-flex align-items-center justify-content-between">
    <span class="font-size-sm"> {{$participant->registration_type['name']}} </span>
    <span class="font-size-sm">{{$participant->registration_type['price']}} </span>
    <span class="font-size-sm">
        @if($participant->registration_type['name'] === 'general')
           {{$general_type_count}}
        @endif
        @if($participant->registration_type['name'] === 'plus')
           {{$plus_type_count}}
        @endif
    </span>
   <?php 
     // Running count in view for subtotals
     if($participant->registration_type['name'] === 'general') 
        $general++;
     if($participant->registration_type['name'] === 'plus') 
        $plus++;
   ?>
    <span class="font-size-sm">{{$$participant->registration_type['name']}}</span>
   // Using a variable variable above to be simpler, but it is basically just calling $general or $plus based on the name of the type
  </li>
@endforeach

Выше ОЧЕНЬ затянуто, просто чтобы объяснить один способ получить то, что вам нужно;Вы можете сделать это намного крепче наверняка.Это также самый простой способ сделать это и становится уродливым, если у вас есть несколько типов регистраций - вы, безусловно, можете улучшить это, но я не знаю, как выглядят ваши контроллеры.Если у вас есть какая-то обратная связь с таблицей участников или типов или, что еще лучше, модель «многие ко многим» в модели регистрации верхнего уровня, возможно, вы можете сделать все это в одном запросе без цикла.Взгляните на метод withCount () из laravel как возможность.

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