如何在多 select 下拉列表中加载项目以进行更新 - Laravel
How to load items in a multi select dropdown for update - Laravel
使用 Laravel,我创建了一个 updatable 表单。这些字段之一是 multi-select 下拉列表。该字段应显示链接到给定项目的所有位置。因此用户可以看到他选择了哪个位置以及他是否想要更新。但这一刻,却没有被选中。您将在下面找到代码。
ProjectsController.php
控制器像这样将数据发送到 blade 模板:
public function edit(Project $project)
{
$locations = Location::where('project_id', $project->id)->get();
return view('projects.edit', [
'project' => $project,
'location' => $locations,
'edit' => true
]);
edit.blade.php
<select multiple class="form-control" name="locations[]">
<option {{old('location',$project->location) == "Room A1" ? 'selected' : ''}} value="Room A1">Room A1</option>
<option {{old('location',$project->location) == "Room C1" ? 'selected' : ''}} value="Room C1">Room C1</option>
<option {{old('location',$project->location) == "Room D2" ? 'selected' : ''}} value="Room D2">Room D2</option>
<option {{old('location',$project->location) == "Room A3" ? 'selected' : ''}} value="Room A3">Room A3</option>
<option {{old('location',$project->location) == "Room G3" ? 'selected' : ''}} value="Room G3">Room G3</option>
</select>
该字段通常应显示所有选定的值。然而,事实并非如此。
例如:对于 id 为 1 的项目,应在下拉列表中选择房间 A1 和房间 D2。
该代码适用于单个下拉菜单,但不适用于 multi-select 下拉菜单。我不太明白为什么。
你能在路上帮我吗?谢谢。
应显示在此 multi-select 下拉列表中的数据存储在数据库中。在此呈现table:
地点Table
+----+------------+----------+--+
| id | project_id | location | |
+----+------------+----------+--+
| 1 | 1 | Room A1 | |
| 2 | 1 | Room D2 | |
| 3 | 2 | Room A1 | |
+----+------------+----------+--+
$locations = Location::where('project_id', $project->id)->get();
Returns 一个 Illuminate\Support\Collection
对象。您可以从集合中提取位置,例如
$selectedLocations = $locations->pluck('location')->toArray();
然后检查 location 是否存在于 $selectedLocations
数组中,如
<option {{(old('location') == "Room A1" || in_array("Room A1", $selectedLocations) ? 'selected' : ''}} value="Room A1">Room A1</option>
使用 Laravel,我创建了一个 updatable 表单。这些字段之一是 multi-select 下拉列表。该字段应显示链接到给定项目的所有位置。因此用户可以看到他选择了哪个位置以及他是否想要更新。但这一刻,却没有被选中。您将在下面找到代码。
ProjectsController.php
控制器像这样将数据发送到 blade 模板:
public function edit(Project $project)
{
$locations = Location::where('project_id', $project->id)->get();
return view('projects.edit', [
'project' => $project,
'location' => $locations,
'edit' => true
]);
edit.blade.php
<select multiple class="form-control" name="locations[]">
<option {{old('location',$project->location) == "Room A1" ? 'selected' : ''}} value="Room A1">Room A1</option>
<option {{old('location',$project->location) == "Room C1" ? 'selected' : ''}} value="Room C1">Room C1</option>
<option {{old('location',$project->location) == "Room D2" ? 'selected' : ''}} value="Room D2">Room D2</option>
<option {{old('location',$project->location) == "Room A3" ? 'selected' : ''}} value="Room A3">Room A3</option>
<option {{old('location',$project->location) == "Room G3" ? 'selected' : ''}} value="Room G3">Room G3</option>
</select>
该字段通常应显示所有选定的值。然而,事实并非如此。 例如:对于 id 为 1 的项目,应在下拉列表中选择房间 A1 和房间 D2。
该代码适用于单个下拉菜单,但不适用于 multi-select 下拉菜单。我不太明白为什么。 你能在路上帮我吗?谢谢。
应显示在此 multi-select 下拉列表中的数据存储在数据库中。在此呈现table:
地点Table
+----+------------+----------+--+
| id | project_id | location | |
+----+------------+----------+--+
| 1 | 1 | Room A1 | |
| 2 | 1 | Room D2 | |
| 3 | 2 | Room A1 | |
+----+------------+----------+--+
$locations = Location::where('project_id', $project->id)->get();
Returns 一个 Illuminate\Support\Collection
对象。您可以从集合中提取位置,例如
$selectedLocations = $locations->pluck('location')->toArray();
然后检查 location 是否存在于 $selectedLocations
数组中,如
<option {{(old('location') == "Room A1" || in_array("Room A1", $selectedLocations) ? 'selected' : ''}} value="Room A1">Room A1</option>