如何不使用选择表单控件重复重复值

时间:2016-08-11 06:15:50

标签: php laravel laravel-5.2

我有一个视图,它为用户提供了多选列表选项。我想在我的选择列表中选择部门,但我在这里遇到问题,我从departments加入users,但我只想在我的选择列表中显示department_name一次。

我有一对多的关系。 departments users

SC

加入声明

$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

SC1

如何在我的选择中避免department_name的重复值?任何帮助或提示将不胜感激!

更新

让我们说我有名为A,B和C的用户属于IT部门,用户名为D,E属于工程部。我想在我看来展示的是所有用户和所有部门。所以选择列表的值将是。

A

C

d

电子

IT部门

工程部

2 个答案:

答案 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