Как изменить код, чтобы он работал не только для статических значений «общие» и «плюс»? - PullRequest
0 голосов
/ 10 июня 2018

Регистрация в конференции имеет 1 или более участников, связанных, и каждый участник, связанный с регистрацией, связан с типом регистрации.

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

Registration {#258 ▼
  ...
  #relations: array:1 [▼
    "participants" => Collection {#262 ▼
      #items: array:2 [▼
        0 => Participant {#269 ▼
          #fillable: array:4 [▶]
          ...
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#274 ▶}
          ]
          ... // then RegistrationType has attributes: name, price, etc
        }
        1 => Participant {#271 ▼
          #fillable: array:4 [▶]
          ...
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#274 ▼
              ... // then RegistrationType has attributes: name, price, etc
            }
          ]
        }
      ]
    }
  ]
 ...
}

Теперь яЯ хочу показать сводку регистрации, например:

Registration type        Quantity            Price           Subtotal
general                1                  0.00             0.00
plus                   2                  2.00             4.00

У меня есть код ниже, чтобы получить эту сводку, но он работает с именами статических типов регистрации (общие "и плюс). Но тип регистрации может иметьпри любом имени пользователь, создающий конференцию, может создавать регистрационные типы с любым именем. Знаете ли вы, как получить такое же резюме, но с любым именем типа регистрации, а не только со статическими значениями «общее» и «плюс»?

<ul class="list-group">
    <li>
        <span>Registration Type</span>
        <span>Quantity</span>
        <span>Price</span>
        <span>Subtotal</span>
    </li>

    <?php
    $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 ++;
    }
    $plus = 0; $general = 0;
    ?>
    @foreach($registrationTypeDetails->participants as $participant)
        <li>
            <span> {{$participant->registration_type['name']}} </span>
            <span>
                @if($participant->registration_type['name'] === 'general')
                    {{$general_type_count}}
                @endif
                @if($participant->registration_type['name'] === 'plus')
                    {{$plus_type_count}}
                @endif
             </span>
            <?php
            if ($participant->registration_type['name'] === 'general')
                $general++;
            if ($participant->registration_type['name'] === 'plus')
                $plus++;
            ?>
            <span class="font-size-sm">{{$participant->registration_type['price']}} </span>
            <span class="font-size-sm">{{$participant->registration_type['price'] * $general_type_count}} </span>
        </li>
    @endforeach
</ul>

Контроллер, который возвращает «registrationTypeDetails»:

class PController extends Controller
{
    public function showSummary($id = "", $slug = "", $regID)
    {
      $registrationDetails = Registration::with('participants:id,ticket_type_id,registration_id')->find($registrationID);
        return view('conferences.showSummary', compact(registrationTypeDetails'));
    }
}

1 Ответ

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

Вы можете использовать массив вместо переменных:

<ul class="list-group">
    <li>
        <span>Registration Type</span>
        <span>Quantity</span>
        <span>Price</span>
        <span>Subtotal</span>
    </li>

    <?php
    $type_counts = [];
    foreach($registrationTypeDetails->participants as $p){
        if (!isset($type_counts[$p->registration_type['name']])) {
            $type_counts[$p->registration_type['name']] = 0;
        }
        $type_counts[$p->registration_type['name']]++;
    }
    ?>
    @foreach($registrationTypeDetails->participants as $participant)
        <li>
            <span> {{$participant->registration_type['name']}} </span>
            <span>
                {{$type_counts[$participant->registration_type['name']]}}
             </span>
            <span class="font-size-sm">{{$participant->registration_type['price']}} </span>
            <span class="font-size-sm">{{$participant->registration_type['price'] * $type_counts[$participant->registration_type['name']]}} </span>
        </li>
    @endforeach
</ul>

Я удалил $general и plus, которые не использовались.Вы можете сделать то же самое для тех, кто вам нужен.

Было бы также неплохо использовать переменную для $type_counts[$participant->registration_type['name']], которая используется очень часто.Это позволит избежать много повторений:

<ul class="list-group">
    <li>
        <span>Registration Type</span>
        <span>Quantity</span>
        <span>Price</span>
        <span>Subtotal</span>
    </li>

    <?php
    $type_counts = [];
    foreach($registrationTypeDetails->participants as $p){
        $name = $p->registration_type['name'];
        if (!isset($type_counts[$name])) {
            $type_counts[$name] = 0;
        }
        $type_counts[$name]++;
    }
    ?>
    @foreach($registrationTypeDetails->participants as $participant)
        @php ($name = $participant->registration_type['name'])
        <li>
            <span> {{$name]}} </span>
            <span>
                {{$type_counts[$name]}}
             </span>
            <span class="font-size-sm">{{$participant->registration_type['price']}} </span>
            <span class="font-size-sm">{{$participant->registration_type['price'] * $type_counts[$name]}} </span>
        </li>
    @endforeach
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...