如何在多 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>