我有一个视图,它为用户提供了多选列表选项。我想在我的选择列表中选择部门,但我在这里遇到问题,我从departments
加入users
,但我只想在我的选择列表中显示department_name
一次。
我有一对多的关系。 departments
和 users
加入声明
$resultRecipient = DB::table('users')->select('users.username', 'departments.department_name', 'users.id')
->join('departments', 'departments.id', '=', 'users.department_id')->get();
查看
@foreach ($resultRecipient as $list)
<option value = "{{ $list->id }}">{{ $list->username }}</option>
<option value = "{{ $list->id }}">{{ $list->department_name }}</option>
@endforeach
如何在我的选择中避免department_name
的重复值?任何帮助或提示将不胜感激!
更新
让我们说我有名为A,B和C的用户属于IT部门,用户名为D,E属于工程部。我想在我看来展示的是所有用户和所有部门。所以选择列表的值将是。
A
乙
C
d
电子
IT部门
工程部
答案 0 :(得分:0)
结果$resultRecipient
包含所有用户的列表,每个用户都附有部门名称。会有重复的部门名称,因为一个部门可能有多个用户。
要获得一个干净的部门名称列表,您需要一个单独的查询:
$departments = DB::table('departments')->get();
在视图中
@foreach ($departments as $d)
<option value = "{{ $d->id }}">{{ $d->department_name }}</option>
@endforeach
更新1
所以你想要一个包含所有用户和部门名称的列表。
首先,让所有用户和所有部门将它们存储到一个数组中:
$departments = DB::table('departments')->select('id, department_name as name')->get();
$users = DB::table('users')->select('id, username as name')->get();
$list = $departments + $users;
其次,更新视图:
@foreach ($list as $item)
<option value = "{{ $item->id }}">{{ $item->name }}</option>
@endforeach
答案 1 :(得分:0)
如果你想向用户和每个用户展示他们的部门,你将不得不用php来做。
你仍然可以使用你的查询,但是你必须做这样的事情。
$dict = [];
$returnArray = [];
foreach($resultRecipient as $key => $queryResult) {
$departmentName = $queryResult->department_name;
$userId = $queryResult->id;
$userName = $queryResult->username;
if (! isset($dict[$departmentName])) {
$returnArray[] = array(
'department_name' => $departmentName,
'users' => [],
);
$index = count($returnArray) - 1;
$dict[$departmentName] = array(
'pointer' => & $returnArray[$index]['users']
);
}
$dict[$departmentName]['pointer'][$userId] = $userName;
}
现在,在您的$returnArray
中,您的结构看起来像这样
{
[
"department_name" : "xxxxx",
"users" : {
"userId1" : "name1",
"userId2" : "name2"
}
]
}
在视图中,您可以循环播放
@foreach ($returnArray as $list)
@foreach ($list['users'] as $userId => $username)
<option value = "{{ $userId }}">{{ $username }}</option>
@endforeach
<option value = "{{ $list['department_name'] }}">{{ $list['department_name'] }}</option>
@endforeach
我不熟悉laravel视图语法,您可能需要稍微改变一下。
这将打印分配给部门的每个用户,然后打印部门名称。
对于视图,您只需要进行2次查询,一次针对用户,一种针对部门:
$users = DB::table('users')->get();
$departments = DB::table('departments')->get();
在视图中,只需执行以下操作:
@foreach ($users as $user)
<option value = "{{ $user->id }}">{{ $user->username }}</option>
@endforeach
@foreach ($departments as $department)
<option value = "{{ $department->id }}">{{ $department->department_name}}</option>
@endforeach