Laravel Patch Request не обновляет таблицу базы данных - PullRequest
0 голосов
/ 11 января 2020

Для наших атрибутов Task у нас есть следующее: task_id в качестве первичного ключа, user_id, stage_id и project_id в качестве внешних ключей, завершено как логическое значение и описание. Наша цель - отобразить задачи в рамках проекта и, установив флажок рядом с ними, пометить их как выполненные. Проблема в нашей базе данных: статус «завершен» не изменяется. Мы используем PhpMyAdmin. У нас есть отдельный контроллер ProjectTasksController для обработки logi c и форма в нашем представлении show.blade. php для отправки запроса. Любая помощь будет принята с благодарностью.

imageimage) }}">
<?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');

Ответы [ 2 ]

1 голос
/ 11 января 2020

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

0 голосов
/ 11 января 2020

Если вы хотите использовать привязку модели маршрута, имя вашего параметра в функции обновления должно соответствовать параметру маршрута:

Route::patch('/tasks/{task}', 'ProjectTasksController@update');

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

...