[英]Laravel Patch Request doesn't update database table
对于我们的任务属性,我们有以下内容:task_id 作为主键,user_id、stage_id 和 project_id 作为外键,完成为布尔值和描述。 我们的目标是显示项目下的任务,并通过选中它们旁边的复选框,将它们标记为完成。 问题是在我们的数据库中,“完成”状态没有改变。 我们正在使用 PhpMyAdmin。 我们有一个名为 ProjectTasksController 的单独控制器用于处理逻辑,在 show.blade.php 视图中有一个用于发送请求的表单。 任何帮助将不胜感激。
@extends('layouts.app')
@section('content')
<div class="display-3">{{$project->name}}</div>
<a class="nav-link" href="/projects/{{$project->project_id}}/edit"><i class="material-icons">edit</i></a>
@if ($project->image)
<div class="row">
<div class="col-12">
<img src="{{ asset('storage/' . $project->image) }}" alt="...." class="img-thumbnail">
</div>
</div>
@elseif(!$project->image)
no image
@endif
@if ($project->tasks->count())
<div>
@foreach ($project->tasks as $task)
<div>
<form method="POST" action="/tasks/{{$task->task_id}}">
{{method_field('PATCH')}} {{-- @method('PATCH') --}}
@csrf
<label class="checkbox {{$task->completed ? 'is_complete' : ''}} " for="completed">
<input type="checkbox" name="completed" onChange="this.form.submit()" {{$task->completed ? 'checked' : ''}} >
{{$task->description}}
</label>
</form>
</div>
@endforeach
</div>
@endif
@endsection
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Task;
class ProjectTasksController extends Controller{
public function update(Task $task)
{
$task->update([
'completed' => request()->has('completed')
]);
return back();
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
protected $guarded = [];
protected $primarykey = ['task_id'];
protected $fillable = ['user_id','stage_id','project_id','completed','description'];
public function stage(){
return $this->belongsTo(Stage::class);
}
public function user(){
return $this->belongsTo(User::class);
}
public function project(){
return $this->belongsTo(Project::class);
}
}
{
_method: "PATCH",
_token: "ljiwu8bEtAkRqSUOXllmaRbSujavHNYNRJR5TMcy",
completed: "on"
}
Route::patch('/tasks/{task_id}', 'ProjectTasksController@update');
您的控制器方法不正确, Task $task
提示只是Task
一个实例,而不是集合或单个模型。您还没有指定Request $request
来获取此工作request()->has('completed')
在方法参数中。您需要按以下方式编辑您的方法:
public function update(Request $request,$task_id)
{
Task::find($task_id)->update([
'completed' => $request->has('completed')
]);
return back();
}
注意:
$request->has('completed')
将返回Boolean
; 如果你想要确切的值,那么你需要检索为$request->get('completed')
如果要使用路由模型绑定,则更新函数中的参数名称应与路由参数匹配:
Route::patch('/tasks/{task}', 'ProjectTasksController@update');
替换protected $primaryKey = ['task_id]';
在 Task 模型中使用protected $primaryKey ='task_id'
。 它应该是一个字符串,而不是一个数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.