現在、laravel6.2で就活に向けてTodoアプリを制作しているものです。
メインページで削除ボタンを押したら、その選択したタスクが消えるようにしたいのですが、ボタンを押しても削除できなくなっています。
色々試してはみたのですが、上手くできなくて、
選択したidとタスクが一致していれば選んだものが消える
そのために、選択したidを取得して、ボタンを押したときに選択したidと等しいものが消える
→これができればいいと思うのですが、コントローラの書き方に原因があるのでしょうか?
お答えいただければ幸いです。
Postcontroller.php
<?php namespace App\Http\Controllers; use App\Task; use App\Category; use Illuminate\Http\Request; class PostController extends Controller { public function index(Task $task) { //tasksという変数名でtaskテーブルの全データを渡す return view('posts/index')->with(['tasks' => $task->get()]); } public function show(Task $task) { return view('posts/show')->with(['task' => $task]); } public function create(Category $category) { return view('posts/create')->with(['categories' => $category->get()]); } //保存 public function store(Request $request, Task $task) { $input = $request['task']; $input += ['user_id' => $request->user()->id]; $task->fill($input)->save(); return redirect('/posts/' . $task->id); } public function edit(Task $task) { return view('posts/edit')->with(['task' => $task]); } public function update(Request $request, Task $task) { $input_task = $request['task']; $task->fill($input_task)->save(); return redirect('/posts/' . $task->id); } public function destory(Task $task) { $task->delete(); $task->save(); return redirect(); } } ?>
index.blade.php
@extends('layouts.app') @section('content') <!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <title>テーブル一覧</title> <!-- Fonts --> <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet"> </head> <body> <main> <div class="container"> <div class="row justify-center-center"> <div class="col-md-4"> <div class="card"> <div class="card-header">タスク追加・詳細</div> <div class="card-body"> <a href="posts/create">タスク追加</a><br> </div> </div> </div> <div class="col-md-8"> <div class="card"> <div class="card-header">タスク</div> <div class="card-body"> <div class="tasks"> <div class="task"> <table class="table"> <thead> <tr> <th class="id"></th> <th class="content">タスクの内容</th> <th class="due_time">期限</th> <th class="status">状態</th> <th class="time">かかる時間</th> <th class="icon"></th> <th class="icon"></th> </tr> </thead> <tbody> @foreach ($tasks as $task) <tr> <td>{{$task->id}}</td> <td><a href="/posts/{{$task->id}}">{{$task->content}}</a></td> <td>{{$task->due_time}}</td> <td>{{$task->status}}</td> <td>{{$task->time}}時間</td> <td><a href="posts/{{ $task->id }}/edit">編集️</a></td> <form method="post" action="{{ action('PostController@destory' , $task->id) }}" id="delete_{{ $task->id}}" > {{ @method_field('delete') }} @csrf <td><button data-id="{{ $task->id }}" class="btn btn-danger btn-sm" onclick="deletePost(this);" >削除️<button></td> </form> </tr> </tbody> @endforeach </table> </div> </div> </div> </div> </div> </div> </div> </main> </body> </html> <script> function deletePost(e) { 'use strict'; if (confirm('本当に削除しますか?')){ document.getElementById('delete_'+ e.dataset.id).submit(); } } </script> @endsection
Task.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Task extends Model { use SoftDeletes; public function user() { return $this->belongsTo('App\User'); } public function category() { return $this->belongsTo('App\Category'); } // function getPaginateByLimit(int $limit_count = 5) // { // return $this::with('category')->orderBy('updated_at', 'DESC')->paginate($limit_count); // } protected $fillable = [ 'user_id', 'category_id', 'content', 'due_time', 'status', 'time', ]; }
web.php
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', 'PostController@index'); Route::get('posts/create', 'PostController@create'); Route::get('/posts/{task}', 'PostController@show'); Route::post('/posts', 'PostController@store'); Route::get('/posts/{task}/edit', 'PostController@edit'); Route::put('/posts/{task}', 'PostController@update'); Route::delete('/posts/{task}', 'PostController@destory'); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home');
まだ回答がついていません
会員登録して回答してみよう