首页 文章

如何将变量从foreach传递到视图?

提问于
浏览
1

我正在尝试将 foreach 中的变量传递给我的视图 . 所以我可以在我的选择表单中使用它 . 因为我有两个表M:M关系 departmentsuser . 我需要得到 user_id 所属的所有 department_name . 我可以通过 department_name 发送数据这里我做了什么请看看 .

数据库图:

SC

department_user

SC

正如您在此处所见 user_id 是用户的ID, document_id 是用户所属的位置 .

模型:

部门:

public function users()
{
    return $this->belongsToMany('\App\Models\User', 'department_user');
}

用户:

public function departments()
{
    return $this->belongsToMany('App\Models\Department', 'department_user');
}

控制器:

public function getDocuments()
{
    $departmentRecipient = DB::table('departments')->get();
    foreach ($departmentRecipient as $department)
    {
        $department->users = DB::table('department_user')
            ->where('department_id', '=', $department->id)
            ->pluck('user_id');
    }

    return view('document.create')->with('department', $department);
}

我死的时候收到所有的users_id并转储我的变量 departmentRecipient .

SC

视图:

<div class = "form-group">
    <label for = "recipient" class = "control-label">Recipient:</label>     
    <select name = "recipient[]" multiple class = "form-control select2-multi" id = "myUserList">
        @foreach ($department as $list)
            <option value = "{{ $list->user_id }}">{{ $list->department_name }}</option>
        @endforeach
    </select>

</div>

我想在控制器中将 foreach $department 改为我的选择表格 . 但它总是说 .

尝试获取非对象的属性(查看:C:\ Users \ JohnFrancis \ LaravelFrancis \ resources \ views \ document \ create.blade.php)

目标:

SC

4 回答

  • 1

    使用以下循环迭代部门用户并将其添加到数据透视表 .

    foreach($request->department as $departmentId) 
    { 
    foreach(Department::find($departmentId->id)->users()->get() as $user1) //find the users belonging to the current department 
    { 
    $document->sentToUsers()->sync([ $user1->id => ['sender_id' => $user->id]],false ); 
    } 
    }
    

    同时从 getDocuments() 删除以下代码,因为它是多余的:

    foreach ($departmentRecipient as $department)
        {
            $department->users = DB::table('department_user')
                ->where('department_id', '=', $department->id)
                ->pluck('user_id');
        }
    
  • 2

    我在 $departmentRecipient 对象的转储值中没有看到 user_id 属性,这就是为什么你得到你提到的错误 . 但是,在 $departmentRecipient 对象中有一个用户数组,它是在 foreach 循环中创建的 . 您正在为每个 user_id 进行处理,这些部门位于单个部门并设置在 $departmentRecipient 对象的名为 users 的属性中,因此您将在 users 属性中获取一个数组 . 在这里,我有一个解决方案,

    public function getDocuments()
    {
        $departmentRecipient = DB::table('departments')->get();
        $departmentUsers = array();
        foreach ($departmentRecipient as $department)
        {
            $users = DB::table('department_user')
                ->where('department_id', '=', $department->id)
                ->pluck('user_id');
            foreach ($users as $userId) {
                $departmentUsers[$userId] = $department->department_name;
            }
        }
    
        return view('document.create')->with('department', $department)->with('departmentUsers', $departmentUsers);
    }
    

    并且你的视图内部循环遍历变量 $departmentUsers ,就像这样,

    @foreach ($departmentUsers as $userId => $departmentName)
            <option value = "{{ $userId }}">{{ $departmentName }}</option>
    @endforeach
    

    这将有效,但由于您的部门包含多个用户,因此您将在 select2 下拉列表中多次获得单个部门名称 . 如果您通过 select2 分享更多您的目标,那么我可以帮助您以其他方式解决您的问题 .

    此外,如果你有兴趣使用Eloquent,那么你可以摆脱很多 foreach 循环 .

  • 2

    在您的情况下,您可以针对每个部门拥有多个用户 . 所以要使它与你的forearch代码一起正常工作 . 您需要确保每个离开时都获得一个用户记录 . 因此,修改控制器中的以下代码行 .

    $department->users = DB::table('department_user')->where('department_id', '=', $department->id)->pluck('user_id');
    

    但是您希望显示部门的所有用户,然后您必须将foreach循环代码更改为视图 .

  • 1

    试试此代码

    应用程序/部门

    public function users()
        {
            return $this->belongsToMany('App\Entities\User', 'department_user', 'user_id', 'department_id');
        }
    

    应用/用户

    public function departments()
    {
        return $this->belongsToMany('App\Models\Department', 'department_user');
    }
    

    调节器

    use App/User;
    
    public function getDocuments($userId,User $User)
    {
        $getSpecificUser = $User->with('departments')->find($userid);
    
        return view('document.create')->compact('getSpecificUser');
    }
    

    视图

    @foreach ($getSpecificUser as $getUser)
        @if(empty($getUser->departments) === false)
            @foreach ($getUser->departments as $departments)
                <option value = "{{ $getUser->id }}">{{ $departments->department_name }}</option>
            @endforeach
        @endif
    @endforeach
    

相关问题