Laravel Patch Request не обновляет таблицу базы данных
Для наших атрибутов задачи у нас есть следующие: task_id как первичный ключ, user_id, stage_id и project_id как внешние ключи, завершенные как логические и описание. Наша цель состоит в том, чтобы отобразить задачи в рамках проекта и, установив флажок рядом с ними, отметить их как завершенные. Проблема в том, что в нашей базе данных статус 'complete' не меняется. Мы используем PhpMyAdmin. У нас есть отдельный контроллер под названием ProjectTasksController для обработки логики и формы в нашем шоу.лезвие.php view для отправки запроса. Любая помощь была бы очень признательна.
@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');
Ответы - Laravel Patch Request не обновляет таблицу базы данных / Laravel Patch Request doesn't update database table

11.01.2020 06:53:04
Если вы хотите использовать привязку модели маршрута имя вашего параметра в функции обновления должно совпадать с параметром маршрута:
Route::patch('/tasks/{task}', 'ProjectTasksController@update');
Заменить protected $primaryKey = ['task_id]';
с protected $primaryKey ='task_id'
в целевой модели. Это должна быть строка, а не массив.

tasks
where id
= 6 limit 1)


protected $primaryKey = [ 'task_id]';
с protected $primaryKey ='task_id'
. Это должна быть строка, а не массив.

11.01.2020 08:19:48
Ваш метод контроллера не был правильным, подсказка 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')





tasks
( project_id
, description
, user_id
, updated_at
, created_at
) values (, dadasdsadas, 1, 2020-01-11 17:59:32, 2020-01-11 17:59:32))

project_id
как $table->integer('project_id')->nullable()
; пожалуйста, отдайте свой голос в качестве благодарности.