blade 缺少 values/indecies 的 foreach 循环

blade foreach loops with missing values/indecies

我目前被一个数据库方案所困扰。我还没到重构的地方(还)。我只需要让它继续下去。简而言之。我有一个团队。一个团队有很多位置.. 所以一个团队可以容纳 1 个用户,可以容纳 12 个,或者 1873 个(我知道这不现实,但你明白了)。 Team 和 positions 也有多态关系。一个位置有一个点,user_id,多态关系的id/model。所有这一切都很好,花花公子。一个用户被分配到一个团队中。

在我的blade文件中,我可以做到

@foreach($team->poisitions as $position)
  <p>{{$position->spot}}</p>
  <p>{{$position->user->name}}</p>
@endforeach

然后我将得到一个显示(一旦格式化正确):

1 user1
2 user4
3 user10
7 user3
9 user12

太棒了,这按预期工作。然而这不是我需要的。我需要显示团队中的许多位置,并带有空格。所以我需要:

1 user1
2 user4
3 user10
4 ''
5 ''
6 ''
7 user3
8 ''
9 user12
10 ''
......
20 ''

我希望得到一些帮助。稍后我什至会寻求帮助来重构它,但就目前而言,任何帮助都会很棒。

为了完成,这里有一些代码:

models\team.php

public function positions(): \Illuminate\Database\Eloquent\Relations\MorphMany
    {
        return $this->morphMany(Position::class, 'positionable')->orderBy('spot', 'ASC');
    }


database/scheme teams:

    $table->text('name');
    $table->integer('spots')->default(6);


database/scheme positions:

    $table->integer('spot')->nullable();
    $table->foreignId('user_id')->constrained()->cascadeOnDelete()->cascadeOnUpdate();
    $table->unsignedBigInteger('positionable_id');
    $table->string('positionable_type');

您可以这样做:

@php
$positions = collect($team->positions)->keyBy('spot');
@endphp
@for($i=0;$i <= $positions->keys()->last();$i++)
  @if (isset($positions[$i]))
      <p>{{$positions[$i]->spot}}</p>
      <p>{{$positions[$i]->user->name}}</p>
  @else
      <p>{{$i}}</p>
      <p>''</p>
  @endif
@endforeach