使用按钮或复选框在 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 表单就足够了。