微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有缺失值/索引的刀片 foreach 循环

如何解决带有缺失值/索引的刀片 foreach 循环

我目前被一个数据库方案束缚住了手脚。我不适合重构(还)。我只需要让它继续下去。简而言之。我有一个团队。一个团队有许多位置......所以一个团队可以容纳 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。