使用数据 'selected' 将数据填充到 select 标签(多个)
Populate data onto select tag(multiple) with data 'selected'
我正在用 Laravel 5.7 制作一个项目管理系统,其中我有我的 tables User
、Project
、Project User
和 Task(not important here)
.我有困难
尝试编辑我的 Project
数据,因为每个项目都有很多用户(合作者)。我的 Project User
table 充当枢轴 table 来存储多对多关系。所有项目 Edit
将显示在单个页面的 bootstrap 模态中,我使用 foreach
循环显示所有数据。 所以我的问题 现在是我试图将我的数据加载到我的多个 select 标签上,同时 select 找到找到的选项。
示例用户 table 有
James
Dexter
项目"A"中的协作者是
James
当我编辑项目 "A" 时,select
输入标签将使用 selected
属性设置 James
,而 Dexter
将是 "unselected" .我已经设法填充了 User
名称并设置了 selected
属性,但是由于一些逻辑错误,如果我编辑项目 "A",它将设置 both James
和 Dexter
作为 selected。
这些是我的table
用户
u_id PK
name
项目
p_id PK
p_name
status (Active/Inactive)
type (Team/Personal)
项目用户
pu_id PK
p_id FK of Project table
u_id FK of user table
项目负责人(索引)
//Get Team data based on project type and user id
$teamProject = DB::table('projects_users')
->join('projects','projects_users.p_id','=','projects.p_id')
->select('projects_users.*','projects.*')
->where('projects.type','=','Team')
->where('projects.status','=','Active')
->where('u_id','=',Auth::user()->u_id)
->get();
//Get all collaborator
$allProjUser = DB::table('projects_users')
->join('projects','projects_users.p_id','=','projects.p_id')
->select('projects_users.*','projects.*')
->where('projects.type','=','Team')
->where('projects.status','=','Active')
->where('projects_users.role','=','Colab')
->get()->keyBy('u_id');
$allUser = User::where('u_id', '!=', Auth::id())->get();
Blade 查看
@foreach ($teamProject as $proj)
{!!Form::open(['action' => ['ProjectController@update',$proj->p_id],'method' => 'POST'])!!}
<!--Title-->
<div class="form-group row">
<label for="inputEmail3" class="col-md-3 col-form-label">Project Title</label>
<div class="col-sm-8">
<input type="title" class="form-control" id="p_name" name="p_name" placeholder="Title"
value="{{$proj->p_name}}" required>
</div>
</div>
<!--Colaborator-->
<div class="form-group row">
<label for="inputEmail3" class="col-md-3 col-form-label">Collaborator</label>
<div class="col-sm-6">
<select name="colab[]" id="colabEdit-{{$proj->p_id}}" placeholder="Select Your Member" required multiple>
<option value="" disabled>Select Your Member</option>
@foreach ($allUser as $user)
//Should validate if user exists in the project pivot table here
@if ($allProjUser->has($user->u_id))
<option value="{{ $user->u_id }}" selected>{{ $user->name }}</option>
@else
<option value="{{ $user->u_id }}">{{ $user->name }}</option>
@endif
@endforeach
</select>
</div>
</div>
@endforeach
如果我的句子结构或英语不清楚,我们将不胜感激和抱歉。谢谢
通过控制器传递 "selected" 值与尝试在视图中应用逻辑是否有效?
对您的项目做出一些假设。
在您的控制器中 'edit' 方法...
$users = User::all();
$project = Project::findOrFail($id);
foreach ($project->user as $projectUser) {
$selectedTags[] = $projectUser->id;
}
return view('edit', compact('project', 'users', 'selectedTags');
那么在你看来...
<select multiple name="collaborators[]">
@foreach ($users as $user)
@if (in_array($user->id, $selectedTags))
<option selected value="{{$user->id}}">{{$user->name}}</option>
@else
<option value="{{$user->id}}">{{$user->name}}</option>
@endif
@endforeach
</select>
然后在'store'方法中,从project_user中删除,其中p_id=编辑项目的ID。为每个 collaborators[] 数组添加一条新记录。
我正在用 Laravel 5.7 制作一个项目管理系统,其中我有我的 tables User
、Project
、Project User
和 Task(not important here)
.我有困难
尝试编辑我的 Project
数据,因为每个项目都有很多用户(合作者)。我的 Project User
table 充当枢轴 table 来存储多对多关系。所有项目 Edit
将显示在单个页面的 bootstrap 模态中,我使用 foreach
循环显示所有数据。 所以我的问题 现在是我试图将我的数据加载到我的多个 select 标签上,同时 select 找到找到的选项。
示例用户 table 有
James
Dexter
项目"A"中的协作者是
James
当我编辑项目 "A" 时,select
输入标签将使用 selected
属性设置 James
,而 Dexter
将是 "unselected" .我已经设法填充了 User
名称并设置了 selected
属性,但是由于一些逻辑错误,如果我编辑项目 "A",它将设置 both James
和 Dexter
作为 selected。
这些是我的table
用户
u_id PK
name
项目
p_id PK
p_name
status (Active/Inactive)
type (Team/Personal)
项目用户
pu_id PK
p_id FK of Project table
u_id FK of user table
项目负责人(索引)
//Get Team data based on project type and user id
$teamProject = DB::table('projects_users')
->join('projects','projects_users.p_id','=','projects.p_id')
->select('projects_users.*','projects.*')
->where('projects.type','=','Team')
->where('projects.status','=','Active')
->where('u_id','=',Auth::user()->u_id)
->get();
//Get all collaborator
$allProjUser = DB::table('projects_users')
->join('projects','projects_users.p_id','=','projects.p_id')
->select('projects_users.*','projects.*')
->where('projects.type','=','Team')
->where('projects.status','=','Active')
->where('projects_users.role','=','Colab')
->get()->keyBy('u_id');
$allUser = User::where('u_id', '!=', Auth::id())->get();
Blade 查看
@foreach ($teamProject as $proj)
{!!Form::open(['action' => ['ProjectController@update',$proj->p_id],'method' => 'POST'])!!}
<!--Title-->
<div class="form-group row">
<label for="inputEmail3" class="col-md-3 col-form-label">Project Title</label>
<div class="col-sm-8">
<input type="title" class="form-control" id="p_name" name="p_name" placeholder="Title"
value="{{$proj->p_name}}" required>
</div>
</div>
<!--Colaborator-->
<div class="form-group row">
<label for="inputEmail3" class="col-md-3 col-form-label">Collaborator</label>
<div class="col-sm-6">
<select name="colab[]" id="colabEdit-{{$proj->p_id}}" placeholder="Select Your Member" required multiple>
<option value="" disabled>Select Your Member</option>
@foreach ($allUser as $user)
//Should validate if user exists in the project pivot table here
@if ($allProjUser->has($user->u_id))
<option value="{{ $user->u_id }}" selected>{{ $user->name }}</option>
@else
<option value="{{ $user->u_id }}">{{ $user->name }}</option>
@endif
@endforeach
</select>
</div>
</div>
@endforeach
如果我的句子结构或英语不清楚,我们将不胜感激和抱歉。谢谢
通过控制器传递 "selected" 值与尝试在视图中应用逻辑是否有效?
对您的项目做出一些假设。
在您的控制器中 'edit' 方法...
$users = User::all();
$project = Project::findOrFail($id);
foreach ($project->user as $projectUser) {
$selectedTags[] = $projectUser->id;
}
return view('edit', compact('project', 'users', 'selectedTags');
那么在你看来...
<select multiple name="collaborators[]">
@foreach ($users as $user)
@if (in_array($user->id, $selectedTags))
<option selected value="{{$user->id}}">{{$user->name}}</option>
@else
<option value="{{$user->id}}">{{$user->name}}</option>
@endif
@endforeach
</select>
然后在'store'方法中,从project_user中删除,其中p_id=编辑项目的ID。为每个 collaborators[] 数组添加一条新记录。