嵌套循环:间隔循环带来主循环第一次迭代的结果

Nested loop: interval loop brings results for the first iteration of the main loop

提问人:islambassiem 提问时间:11/8/2023 更新时间:11/8/2023 访问量:38

问:

我正在编写一个 laravel 代码,其中我需要在刀片中嵌套循环。

这是我的控制器

  public function show(string $id)
  {
    $transaction = Transaction::findOrFail($id);
    $subject_ids = DB::connection('transfer')
      ->table('subjects')
      ->join('transactions_subjects', 'transactions_subjects.subject_id', '=', 'subjects.id')
      ->where('transactions_subjects.transaction_id', '=',  $transaction->id)
      ->distinct()
      ->get(['subject_id', 'name', 'hours']);

    $subjects = DB::connection('transfer')
      ->table('subjects')
      ->join('transactions_subjects', 'transactions_subjects.transferable_id', '=', 'subjects.id')
      ->where('transactions_subjects.transaction_id', '=',  $transaction->id);

    return view('transfer.transactions.details', [
      'transaction'   => $transaction,
      'subject_ids'   => $subject_ids,
      'subjects'      => $subjects,
    ]);
  }

我有一个交易表,它有一个主题 ID 和一个可转让的 ID,该 ID 又与主题表相关联。

还有一个transaction_subject表,其中包含与一个或多个主题相关的许多可转让内容。

我为每个可转移对象划分了不同的值,以便我可以使用嵌套循环遍历 sujects。

  @foreach ($subject_ids as $id)
    <div class="row wrapper table-responsive table text-center">
      <div class="col-2">
        <div>{{ $id->subject_id }}</div>
      </div>
      <div class="col-2">
        <div>{{ $id->hours }}</div>
      </div>
      @foreach ($subjects->where('subject_id', $id->subject_id)->get() as $subject)
        <div class="col-2">
          <div>{{ $subject->code }}</div>
        </div>
        <div class="col-2">
          <div>{{ $subject->name }}</div>
        </div>
        <div class="col-2">
          <div>{{ $subject->hours }}</div>
        </div>
        <div class="col-2"></div>
        <div class="col-2"></div>
        <div class="col-2"></div>
      @endforeach
      <hr>
    </div>
  @endforeach

在 blade 文件中,我对可转移物的每个不同值进行了迭代,并在嵌套循环中引入了相关的主题。

但是,嵌套循环为外部循环的唯一第一次迭代带来相关主题,并且后续行没有值。

我用 vanila PHP 编写了相同的逻辑,它工作正常。我一定是做错了什么或错过了什么。

有人能帮我吗?

Laravel-Blade 嵌套环

评论


答:

0赞 Jeyhun Rashidov 11/8/2023 #1

修改代码,如下所示:

public function show(string $id)
{
  $transaction = Transaction::with('subjects')->findOrFail($id);

  return view('transfer.transactions.details', [
    'transaction' => $transaction,
  ]);
}
@foreach ($transaction->subjects as $subject)
  <div class="row wrapper table-responsive table text-center">
    //rows
  </div>
@endforeach

在您的模型中:

public function subjects()
{
  return $this->belongsToMany(Subject::class, 'transactions_subjects', 'transaction_id', 'subject_id');
}
0赞 Khayam Khan 11/8/2023 #2

问题在于你如何直接在循环中获取主题。

还有 2 种方法可以比这种方法更好地获取相关数据,一种是通过模型关系或连接,但无论如何都会更改您的代码。

@foreach ($subject_ids as $id)
    {{--  your html code    --}}
    @php
        $relatedSubjects = $subjects->where('subject_id', $id->subject_id);
    @endphp
    @foreach ($relatedSubjects as $subject)
      {{--  your html code    --}}
    @endforeach
@endforeach

评论

0赞 islambassiem 11/8/2023
不幸的是,是一样的。不知道它出了什么问题。
0赞 Khayam Khan 11/8/2023
还要写 ->get() 来$students查询,然后看看