我正在编写一个 Laravel 代码,其中我需要在 Blade 中使用嵌套循环。
这是我的控制器
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 表,其中包含与一个或多个主题相关的许多可转让资产。
我为每个可转移对象提供了不同的值,以便我可以使用嵌套循环遍历主题。
@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
在刀片文件中,我对可转移的每个不同值进行了迭代,并在嵌套循环中引入了相关主题。
但是,嵌套循环只为外循环的第一次迭代带来相关主题,并且后续行没有值。
我用 vanila PHP 编写了相同的逻辑,并且运行良好。我一定是做错了什么或者漏掉了什么。
有人可以帮我吗?
这样修改代码:
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');
}