使用按钮或复选框在 laravel 5.3 中保存多对多关系时出现问题
Problems with saving in a many to many relatinship in laravel 5.3 with buttons or checkboxes
我在保存多对多关系的枢轴时遇到问题 table。在我的应用程序中,我有一系列具有许多任务的项目。对于某个项目及其任务,我希望授权用户能够分配所需的任务。
这是我的模型
public function tasks(){
return $this->belongsToMany('App\Task', 'user_task');
}
}
在用户模型中
public function users(){
return $this->belongsToMany('App\User', 'user_task');
}
在任务模型中
foreach($project->tasks as $task)
<form role="form" method="POST" action="{{ route('tasks.assign', ['taskId'=>$task->id]) }}">
{{-- <button class="btn btn-sm btn-success">
<span class="glyphicon glyphicon-star-empty" aria-hidden="true"></span>
</button> --}}
{{ csrf_field() }}
<div class="checkbox">
<label>
<input type="checkbox"> {{ $task->name }}
</label>
<label> <p>{{ $task->description }}</p></label>
</div>
@endforeach
<input class = "btn btn-success" type="submit" value="Submit">
</form>
这是我在 TaskController 中的函数,它应该保存在 pivot table
public function joinTask(Request $request, Task $task)
{
$user = Auth::user();
$user->tasks()->attach($task);
//$tasks = $this->request->input('tasks', []);
//$user->tasks()->attach($tasks);
Session::flash('success','task asignat cu success');
return redirect()->route('tasks.index')->withProject($project)->withTasks($tasks);
}
我还想提一下,我是 laravel 的超级新手,所以这个项目不知何故是我的第一个 laravel 项目(我使用 laravel 5.3)
我要在您的设置中验证的第一件事是您在路由、post 表单和控制器方法中使用相同的 "task" 变量。现在您似乎正试图将名为 $taskId
的变量传递到路由中:
<form role="form" method="POST" action="{{ route('tasks.assign', ['taskId'=>$task->id]) }}">
,但您希望 Laravel 根据控制器方法中的 $task
变量自动实例化任务模型。
public function joinTask(Request $request, Task $task)
查看您的路由定义将有助于进一步调试。
一些额外的建议:
我要清理的另一件事是删除复选框,原因有二:1) 看起来它没有 "name" 属性,因此不会向服务器发送任何内容; 2) 看起来你的表单只提交了一个任务,并且是通过路由 / url 完成的,所以不需要额外的控件,只需要任务名称和提交按钮。
所以在这种情况下,一个普通的 GET 表单就足够了。
我在保存多对多关系的枢轴时遇到问题 table。在我的应用程序中,我有一系列具有许多任务的项目。对于某个项目及其任务,我希望授权用户能够分配所需的任务。
这是我的模型
public function tasks(){
return $this->belongsToMany('App\Task', 'user_task');
}
}
在用户模型中
public function users(){
return $this->belongsToMany('App\User', 'user_task');
}
在任务模型中
foreach($project->tasks as $task)
<form role="form" method="POST" action="{{ route('tasks.assign', ['taskId'=>$task->id]) }}">
{{-- <button class="btn btn-sm btn-success">
<span class="glyphicon glyphicon-star-empty" aria-hidden="true"></span>
</button> --}}
{{ csrf_field() }}
<div class="checkbox">
<label>
<input type="checkbox"> {{ $task->name }}
</label>
<label> <p>{{ $task->description }}</p></label>
</div>
@endforeach
<input class = "btn btn-success" type="submit" value="Submit">
</form>
这是我在 TaskController 中的函数,它应该保存在 pivot table
public function joinTask(Request $request, Task $task)
{
$user = Auth::user();
$user->tasks()->attach($task);
//$tasks = $this->request->input('tasks', []);
//$user->tasks()->attach($tasks);
Session::flash('success','task asignat cu success');
return redirect()->route('tasks.index')->withProject($project)->withTasks($tasks);
}
我还想提一下,我是 laravel 的超级新手,所以这个项目不知何故是我的第一个 laravel 项目(我使用 laravel 5.3)
我要在您的设置中验证的第一件事是您在路由、post 表单和控制器方法中使用相同的 "task" 变量。现在您似乎正试图将名为 $taskId
的变量传递到路由中:
<form role="form" method="POST" action="{{ route('tasks.assign', ['taskId'=>$task->id]) }}">
,但您希望 Laravel 根据控制器方法中的 $task
变量自动实例化任务模型。
public function joinTask(Request $request, Task $task)
查看您的路由定义将有助于进一步调试。
一些额外的建议:
我要清理的另一件事是删除复选框,原因有二:1) 看起来它没有 "name" 属性,因此不会向服务器发送任何内容; 2) 看起来你的表单只提交了一个任务,并且是通过路由 / url 完成的,所以不需要额外的控件,只需要任务名称和提交按钮。
所以在这种情况下,一个普通的 GET 表单就足够了。