提问人:islambassiem 提问时间:11/8/2023 更新时间:11/8/2023 访问量:38
嵌套循环:间隔循环带来主循环第一次迭代的结果
Nested loop: interval loop brings results for the first iteration of the main loop
问:
我正在编写一个 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 编写了相同的逻辑,它工作正常。我一定是做错了什么或错过了什么。
有人能帮我吗?
答:
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查询,然后看看
评论