提问人:Conlaodh Quinn 提问时间:1/5/2022 最后编辑:brombeerConlaodh Quinn 更新时间:1/6/2022 访问量:365
使用 Laravel 将变量从索引传递到控制器
Passing variable from index to controller using Laravel
问:
我是使用 Laravel 的新手,我目前正在尝试将索引刀片文件中的变量传递给控制器,以便调出与特定设备代码 ID 关联的所有设备类型字段。
当我包含与该设备代码 ID 相关的特定数字时,我能够访问与该设备代码 ID 关联的设备类型字段(例如,输入 2 会显示设备代码 ID 2 的设备类型详细信息,输入 3 会显示设备代码 ID 3 的设备类型详细信息等)。
但是,当我尝试在控制器中使用 for 循环传递与每个单独的设备代码 ID 相关的变量时,设备类型循环似乎未被访问并且不返回任何信息。为了清楚起见,我将包含我当前代码的片段。
对此问题的任何帮助或指导将不胜感激!
控制器文件
public function index()
{
$apparatusCodes = ApparatusCodes::get();
foreach ($apparatusCodes as $apparatusCode){
$apparatusTypes = ApparatusTypes::where('apparatus_code_id', $apparatusCode->id)->get();
}
return view('apparatus_codes.index', compact('apparatusCodes', 'apparatusTypes'));
}
Index.blade 文件
<table id="datatable" class="stripe hover dt-responsive display nowrap" style="width:100%; padding-top: 1em; padding-bottom: 1em;">
<thead>
<tr>
<th>ID</th>
<th >Apparatus Code</th>
<th>Description</th>
<th>Rent</th>
<th></th>
</tr>
</thead>
<!--start of for loop-->
@foreach ($apparatusCodes as $apparatusCode)
<tbody>
<tr data-toggle="collapse" id="table{{ $apparatusCode->id}}" data-target=".table{{ $apparatusCode->id}}">
<td> {{ $apparatusCode->id}} </td>
<td>{{ $apparatusCode->apparatus_code}} </td>
<td> {{ $apparatusCode->description}}</td>
<td> {{ $apparatusCode->rent}}</td>
<td @click="isOpen = !isOpen" class="main-bg"><img class="mb-1 duration-300 h-6 w-6" :class="{'transform rotate-180' : isOpen}"
src="../img/Icon-arrow-dropdown-white.png" alt="arrow down">
</td>
<td><img class="mb-1 duration-300 h-6 w-6" :class="{'transform rotate-180' : isOpen}"
src="../img/edit-icon.svg" alt="Edit Icon">
</td>
</tr>
<tr x-show.transition.duration.300ms.origin.bottom="isOpen" x-cloak @click.away="isOpen = false" class="collapse table{{ $apparatusCode->id}}">
<td colspan="999">
<div>
<table id="datatable" class="table table-striped">
<thead>
<tr>
<th>Apparatus Code </th>
<th>Apparatus Type</th>
<th>Compensation </th>
<th>Created On </th>
<th>Created By </th>
<th></th>
@foreach ($apparatusTypes as $apparatusType)
</thead>
<tbody>
<tr>
<td>{{ $apparatusCode->apparatus_code}}</td>
<td>{{ $apparatusType->apparatus_type }}</td>
<td>{{ $apparatusType->compensation }}</td>
<td>{{ $apparatusType->created_at }}</td>
<td>{{ $apparatusType->users->name}}</td>
<td> <button type="button" class="btn btn-default btn-edit js-edit"><img class="mb-1 duration-300 ml-4 inset-0 h-6 w-6" src="/../../img/Icon-edit-gray.png" alt="edit"></button></td>
</tr>
@endforeach
</table>
</tr>
</tr>
</td>
</tbody>
@endforeach
</table>
答:
0赞
lagbox
1/5/2022
#1
如果您设置了关系,则可以立即加载每个:ApparatusTypes
ApparatusCode
$apparatusCodes = ApparatusCodes::with('appartusTypes')->get();
然后,在视图中,您可以迭代每个:appartusTypes
ApparatusCode
@foreach ($apparatusCodes as $apparatusCode)
...
@foreach ($apparatusCode->apparatusTypes as $type)
...
@endforeach
...
@endforeach
在不使用关系的情况下,您可以获取 ApparatusCode 的所有 ApparatusType,然后按以下条件对它们进行分组:apparatus_code_id
$codes = ApparatusCodes::get();
$types = ApparatusTypes::whereIn('apparatus_code_id', $codes->pluck('id'))
->get()
->groupBy('apparatus_code_id');
然后,在视图中,您可以迭代与当前代码对应的组:apparatus_code_id
@foreach ($codes as $code)
...
@foreach ($types->get($code->id, []) as $type)
...
@endforeach
...
@endforeach
Laravel 8.x Docs - 雄辩 - 关系 - Eeager Loading with
Laravel 8.x Docs - 集合 - 可用方法 - pluck
Laravel 8.x Docs - 集合 - 可用方法 - groupBy
评论
1赞
Conlaodh Quinn
1/6/2022
我已经实施了您的第一个涉及急切加载的解决方案,这似乎奏效了,感谢您的所有帮助!我将阅读有关急切加载的文档以充分了解它的发展,再次感谢!
0赞
lagbox
1/6/2022
没问题,我会为答案中使用的内容添加一些文档链接......如果答案是你要找的,请随时接受这个答案
上一个:使表单内的表单在单击时成为焦点
评论
$apparatusTypes
foreach