Laravel Patch Request не обновляет таблицу базы данных

Laravel Patch Request не обновляет таблицу базы данных

11.01.2020 06:41:19 Просмотров 21 Источник

Для наших атрибутов задачи у нас есть следующие: 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

András

11.01.2020 06:53:04

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

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

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

https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59695993#comment105548033_59695993
когда мы пытаемся это сделать, то получаем ошибку: SQLSTATE[42S22]: столбец не найден: 1054 неизвестный столбец 'id' в предложении where (SQL: select * from taskswhere id= 6 limit 1)
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59695993#comment105548120_59695993
когда мы ставим в task_id он дает нам эту ошибку в браузере, wheRequest URL: 127.0.0.1:8000 / tasks / 6 метод запроса: POST Status Code: 302 Found удаленный адрес: 127.0.0.1:8000 Referer Policy: no-Referer-when-downgraden мы проверяем его
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59695993#comment105548169_59695993
Заменить protected $primaryKey = [ 'task_id]'; с protected $primaryKey ='task_id'. Это должна быть строка, а не массив.
Является ответом!
Md. Amirozzaman

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')

https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59696796#comment105549001_59696796
Спасибо, что он сработал для завершения задачи! Но теперь для добавления задач это дает нам следующую ошибку, мы немного изменили маршруты и шоу.лезвие.PHP-страница. Можете ли вы помочь нам с этим тоже, мы действительно застряли, заранее спасибо!
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59696796#comment105549007_59696796
общественные функции магазина(проекта $проекта) { //$Проект->addTask(запрос('описание')); задачи::создать([ 'project_id' => $проект->project_id, 'описание'=>запрос('описание'), 'ид_пользователя' => авт()->идентификатор(), ]); вернуться(); }
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59696796#comment105549023_59696796
Маршрут::ресурсов(['проекты'=> 'ProjectController', 'профиль' => 'ProfileController', 'projectTask' => 'ProjectTasksController' ]);
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59696796#comment105549043_59696796
<form method="POST" action="/projectTask" class="box"> @CSRF атак <div class="field"> <label class="label" for="description">Новое Задание </label> <div class="control"> <input type="text" class="form-control" name="description" value=""> </div> </div> <br> <div class="field"> <div class="control"> <button type="submit" class="btn btn-primary">Добавить Задачу</button> </div> </div> </form>
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59696796#comment105549114_59696796
Вот ошибка SQLSTATE[23000]: нарушение ограничения целостности: 1048 столбец 'project_id' не может быть null (SQL: insert into 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))
https://stackoverflow.com/questions/59695910/laravel-patch-request-doesnt-update-database-table/59696796#comment105549300_59696796
Вам нужно отредактировать свою таблицу миграции, изменить свой project_idкак $table->integer('project_id')->nullable(); пожалуйста, отдайте свой голос в качестве благодарности.
Закрыть X