我有两个表作为用户和部门。我的departments表有两列作为id和title,我的users表包含用户信息列和一个exta列作为dept_id,它与department表id相关。
我想为部门创建一个下拉选择选项,当选择部门时,具有相关部门ID的用户应显示在另一个下拉列表中,我该怎么做..?
我正在获取控制器中的所有用户和部门数据并将其发送到视图。
我的控制器是......
public function index()
{
$user = DB::table('users')->get();
$dept = DB::table('departments')->get();
return view('userview', compact('user', 'dept'));
}

我的观点是......
<select class="form-control" id="department" name="department" >
@foreach($dept as $dept)
<option value="{{ $dept->id }}">{{ $dept->name }}</option>
@endforeach
</select>
<select class="form-control" id="user" name="user" >
<option> </option>
</select>
&#13;
答案 0 :(得分:3)
我会使用Ajax请求来获取相关用户并填充第二个列表。在User
和Department
模型中设置关系,例如:
// Department.php
public function users() {
return $this->hasMany(User::class);
}
// User.php
public function department() {
return $this->belongsTo(Department::class);
}
在您的控制器中:
// DepartmentController.php
public function index() {
return view('userview', [
'departments' => Department::all()
]);
}
public function users(Request $request, $id) {
if ($request->ajax()) {
return response()->json([
'users' => User::where('dept_id', $id)->get()
]);
}
}
然后在您的视图中,在第一个选择上为更改事件设置事件侦听器:
<select class="form-control" id="department" name="department" >
@foreach($departments as $dept)
<option value="{{ $dept->id }}">{{ $dept->name }}</option>
@endforeach
</select>
<select class="form-control" id="user" name="user" ></select>
<script>
$('#department').on('change', e => {
$('#user').empty()
$.ajax({
url: `/departments/${e.value}/users`,
success: data => {
data.users.forEach(user =>
$('#user').append(`<option value="${user.id}">${user.name}</option>`)
)
}
})
})
</script>