什么,我有简短的解释: 使用数据透视表project
和user
之间的关系ManyOnMany
叫project_user
。Laravel同步()方法错误
当显示某个项目的用户印有复选框的列表,以便他们将尽快复选框被选中链接到项目(所以它会发送user_id
+ project_id
到pivot table
现在的问题。当我们让用户(例如Admin der Liam
)链接到项目,将工作和数据将被发送到数据库中。 但当复选框再次选中它会给一个Call to a member function users() on a non-object
错误而不是清理表格并仅放入已选中的框到数据库
控制器:
public function edit($id, Project $project)
{
$users = User::with('projects')->get();
$project = $this->project->find($id);
return view('project.edit', ['project' => $project, 'id' => 'edit', 'project_id' => $id, 'users' => $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);
$keys[] = $k;
}
}
}
$project->users()->sync($keys);
$project = $this->project->find($request->project_id);
$project->fill($request->input())->save();
return redirect('project');
}
HTML /刀片:
@if(isset($users))
@foreach($users as $user)
<tr>
<td>
{{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
</td>
<td>
{!! Form::checkbox('contribute['.$user->id.']', '1', $user->projects->contains($project->id)) !!}
</td>
</tr>
@endforeach
@endif
你把这个$项目 - >用户() - >同步($键);在下一行中启动$ project对象之前。这就是为什么users()不是成员函数的原因。 –
那么需要改变以使其按预期工作? – Liam
把$ project-> users() - > sync($ keys);在$ project = $ this-> project-> find($ request-> project_id)之后;在你的while循环中。 –