我们目前正在开发一个锦标赛平台。这个平台确实产生了完全动态的排名,因此我们每次都有不同的积分,不同数量的参与者等。
锦标赛可以有多轮。对于每一轮,管理员可以为参与者设置排名。这就是问题所在。我目前的代码:
<select name="round_{{ $i }}_placements[{{ $participant->id }}]" class="form-control scoreboard-placement">
@for($x=0;$x<$tournament->checkedin()->count()+1;$x++)
<option value="{{ $x }}" @if($participant->getRanking($i)->ranking_value == $x) selected="selected" @endif>{{ $x }}</option>
@endfor
</select>
但我现在加载时间确实存在很大问题:
在我的上一个案例中,我有67名参与者。对于他经历的每个参与者,并添加了所有这67个选择选项。但它也检查了67次排名,这显然不会发生。这将我们后端的加载时间增加到将近30秒,这是巨大的。当我删除它们时,它又回到了2。
所以我想要的是:创建所有选项一次并自动更改所选框。你们知道我怎么能做到这一点吗?切换到JS进行更改也没有问题。
答案 0 :(得分:7)
你应该$trnmntCheckedinCount = $tournament->checkedin()->count()
并在循环中使用它。现在每个条目调用一次这些方法(所以67次)。我的建议只做一次,这应该是重要的。
您可以检查每个选项的每个用户的排名是$x
(因此,有67个参与者的10个选项意味着670个检查)。您应该在选项for
之前检查用户排名,然后检查所述变量。这应该很重要:)
我的laravel几乎不存在,但是像这样:
@php
// Place this out of the loop which loops through your users
$tournementCount = $tournament->checkedin()->count();
@endphp
<select name="round_{{ $i }}_placements[{{ $participant->id }}]" class="form-control scoreboard-placement">
@php
$participantRanking = $participant->getRanking($i)->ranking_value;
@endphp
@for($x=0; $x<$tournementCount+1; $x++)
<option value="{{ $x }}" @if( $participantRanking == $x ) selected @endif>{{ $x }}</option>
@endfor
</select>