Краткое объяснение того, что у меня есть: ManyOnMany
соотношение между project
и user
с помощью сводной таблицы называется 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-> пользователей() -> синхронизация ($ ключей); прежде чем вы начнете объект $ project в следующей строке. Вот почему users() не является функцией-членом. –
Итак, что нужно изменить, чтобы заставить его работать по своему желанию? – Liam
Поместите функцию $ project-> users() -> sync ($ keys); после $ project = $ this-> project-> find ($ request-> project_id); в вашем цикле while. –