使用数据 'selected' 将数据填充到 select 标签(多个)

Populate data onto select tag(multiple) with data 'selected'

我正在用 Laravel 5.7 制作一个项目管理系统,其中我有我的 tables UserProjectProject UserTask(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 JamesDexter 作为 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[] 数组添加一条新记录。