问题描述
我目前被一个数据库方案束缚住了手脚。我不适合重构(还)。我只需要让它继续下去。简而言之。我有一个团队。一个团队有许多位置......所以一个团队可以容纳 1 个用户,可以容纳 12 个,或 1873 个(我知道不现实,但你明白了)。团队与职位也有多态关系。一个位置有一个点、user_id 和多态关系的 id/model。所有这些都很好,很花哨。用户在团队中被分配了一个位置。
在我的刀片文件中,我可以做到
@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