【发布时间】:2020-04-28 22:39:09
【问题描述】:
对于我们的任务属性,我们有以下内容: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');
【问题讨论】:
标签: php database laravel laravel-blade