首页 > 解决方案 > 每个注册只显示一个列表项

问题描述

我有下面的代码来显示会议中用户的下一次注册:

$nextRegistrations = $user->registrations()
          ->with('participants.registration_type')
          ->whereHas(
              'conference',
              function ($query) {
                  $query->where('end_date', '>', now());
              }
          )->paginate($pageLimit);

然后,如果“registration_types”表的“available_certificate”列的值为“Y”,我想在视图中为每个注册显示一个链接“获取证书”。所以我有下面的代码,但是当注册有超过 1 名参与者时会出现问题,例如,如果注册有 2 名参与者与之关联,它会出现两个列表项,而不仅仅是一个列表项。你知道怎么解决吗?

<ul class="list-group events-list">
@foreach($nextRegistrations as $nextRegistration)
    @foreach($nextRegistration->participants as $participant)
        @if(!empty($nextRegistration->conference) || !empty($nextRegistration->conference->start_date))
                @if (($participant->registration_type->certificate_available == 'Y')                                                                
                <a href="{{route('conferences.certificateInfo',
                [
                'regID'=> $nextRegistration->id])}}"
                       class="btn btn-primary ml-2">Download certificate</a>
                @endif
            </li>
        @endif
    @endforeach
@endforeach

</ul>

标签: laravel

解决方案


好吧,它为每个有效参与者显示了一个列表项,因为这就是您要求它执行的操作。您有一个foreach循环,表示当参与者有效时,它应该显示一个列表项。如果您想在每次注册时显示一个列表项,则需要更改您的代码。我建议将列表项代码添加到第一个foreach循环并检查每个参与者,一旦找到有效参与者,就可以退出foreach循环。看我的例子:

<ul class="list-group events-list">
    @foreach($nextRegistrations as $nextRegistration)
        @php
            $validRegistration = false;
        @endphp

        @foreach($nextRegistration->participants as $participant)
            @if(!empty($nextRegistration->conference) || !empty($nextRegistration->conference->start_date))
                @if (($participant->registration_type->certificate_available == 'Y')                                                                
                    @php
                        $validRegistration = true;
                    @endphp

                    @break
                @endif
            @endif
        @endforeach

        @if($validRegistration)
            <li><a href="{{ route('conferences.certificateInfo', ['regID' => $nextRegistration->id]) }}" class="btn btn-primary ml-2">Download certificate</a></li>
        @endif
    @endforeach
</ul>

推荐阅读