【问题标题】:Laravel 5 check if pivot data is already in databaseLaravel 5检查数据透视数据是否已经在数据库中
【发布时间】:2015-08-01 18:04:19
【问题描述】:

有一个 ManyOnMany 系统(3 个表,projectsusersproject_user

多个用户可以在一个项目上工作,一个用户可以有多个项目。

当 checkbox = 选中时,它会将数据库发送到数据透视表。

现在我面临的问题是,每次单击项目/用户 ID 都会发送到 project_user 表。 当用户实际添加到项目中时,我需要已经选中该复选框。

所以我是怎么看的:form::checkbox 有第三个函数检查或未检查,并且在我的 controller.edit 中使用 if/else 语句,我将以某种方式进行验证。请帮帮我!

刀片:

@foreach($users as $user)
            <tr>
                <td>
                    {{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
                </td>
                <td>
                    {!! Form::checkbox('contribute['.$user->id.']', '1', $checkifinproject) !!}
                </td>
            </tr>
        @endforeach

控制器:

public function edit($id, Project $project)
{
    $users = User::all();

    $project = $this->project->find($id);


    if ($users == $project)
    {
        $checkifinproject = 'checked';
    }
    else {

    }


    return view('project.edit', ['project' => $project, 'id' => 'edit', 'project_id' => $id], compact('users'));
}



public function update(CreateProjectRequest $request)
{
    if($request->get('contribute'))
    {
        foreach($request->get('contribute') as $k => $contribute)
        {
            if($contribute == 1)
            {
                $project = $this->project->find($request->project_id);
                $project->users()->attach($k);
            }
        }
    }

    $project = $this->project->find($request->project_id);
    $project->fill($request->input())->save();

    return redirect('project');
}

型号:

用户

public function projects() 
{
    return $this->belongsToMany('App\Project', 'project_user', 'user_id', 'project_id');
}

项目

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

【问题讨论】:

  • 你如何定义雄辩的关系。您可以使用haswhereHas 内置函数

标签: php laravel checkbox


【解决方案1】:

我认为问题在于您正在比较两个永远不会相同的事物并试图确定该用户是否属于该项目。更好的做法是查询所有用户及其项目,并在遍历用户时检查您正在修改的项目是否是用户所属的项目之一。

这样就可以了……

控制器

public function edit($id, Project $project)
{
    $users = User::with('projects')->get();
    $project = $this->project->find($id);

    return view('projects.edit', ['users' => $users, 'project' => $project]);
}

查看

@foreach($users as $user)
        <tr>
            <td>
                {{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
            </td>
            <td>
                {!! Form::checkbox('contribute['.$user->id.']', '1', $user->projects->contains('id', $project->id)) !!}
            </td>
        </tr>
@endforeach

【讨论】:

  • 有什么办法可以联系到你吗?上次你对我的帮助也很好,解释也很好,因为我是初学者,你对我的帮助很好。顺便说一句,这并没有解决我的问题
  • 我不能在聊天中说话。​​
猜你喜欢
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多