【问题标题】:blade foreach loops with missing values/indecies缺少值/索引的刀片 foreach 循环
【发布时间】:2021-09-02 19:42:37
【问题描述】:

我目前受到数据库方案的困扰。我还没有重构的地方(还)。我只需要搞定这件事。简而言之。我有一个团队。一个团队有很多位置.. 所以一个团队可以容纳 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');

【问题讨论】:

  • 你如何决定 spot 应该是空的。是否有任何条件或 $position->user->name 返回空?
  • 如果该位置为空,则位置中将没有表格行。只存储填充的点。

标签: php laravel loops laravel-blade


【解决方案1】:

你可以这样做:

@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

【讨论】:

  • 我也试过了,但并不是所有的团队都有用户,所以添加 keyBy() 会出现“找不到关系”错误。这又是有道理的,如果没有关系,就没有什么可关键的。
  • 没关系,我破坏了您答案的实施。它现在按预期工作。谢谢你。我拉着头发试图弄清楚这一点。希望我能尽快重构它。
猜你喜欢
  • 2017-05-29
  • 2018-04-04
  • 2017-11-13
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2021-05-05
  • 2021-02-11
  • 1970-01-01
相关资源
最近更新 更多