前提・実現したいこと
下記画面で削除を押したときにそのままページが更新されて消したデータは表示させないようにしたい。
viewでページ表示を書くとエラーはでないが消したデータが表示され、他の部分をクリックすると消える
それをridirectで1発で表示させないようにしたい。
発生している問題・エラーメッセージ
こちらはいただいた回答のIDの引き渡しで解決しましたがエラーメッセージが変わりました。
該当のソースコード
下記コードで削除後の処理を行っています。
FolderController.php
public function delete(int $id){ $folders = Auth::user()->folders()->get(); $current_folder=Folder::find($id); $tasks=$current_folder->tasks()->get(); $current_folder->delete(); // このviewであればエラーはでない。 // return view('tasks.index')->with(['folders'=>$folders, // // 'current_folder_id' => $id, // 'current_folder_id' => $current_folder->id, // 'tasks'=>$tasks, // // var_dump($current_folder)]); // ]); // 下記3つどれも同じエラー return redirect()->route('tasks.index',['folders'=>$folders,'current_folder_id' => $current_folder->id,'tasks'=>$tasks,]); return redirect()->route('tasks.index',['folders'=>$folders,'current_folder_id' => $current_folder->id,'tasks'=>$tasks,],$current_folder->tasks); return redirect()->route('tasks.index',$current_folder->tasks); }
Folder.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Folder extends Model { // use HasFactory; public function tasks() { return $this->belongsTo('App\Models\Task'); } }
web.php
<?php use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Auth; Route::get('homestead.test', function () { return view('home.blade.php'); })->middleware(['auth'])->name('homestead.test'); require __DIR__.'/auth.php'; Route::group(['middleware' => 'auth'], function() { Route::get('/', 'HomeController@index')->name('home'); Route::get('/folders/{id}/tasks', 'TaskController@index')->name('tasks.index'); Route::get('/folders/create', 'FolderController@showCreateForm')->name('folders.create'); Route::post('/folders/create', 'FolderController@create'); Route::get('/folders/{id}/tasks/create', 'TaskController@showCreateForm')->name('tasks.create'); Route::post('/folders/{id}/tasks/create', 'TaskController@create'); Route::get('/folders/{id}/tasks/{task_id}/edit', 'TaskController@showEditForm')->name('tasks.edit'); Route::post('/folders/{id}/tasks/{task_id}/edit', 'TaskController@edit'); Route::delete('/folders/{id}/delete', 'FolderController@delete')->name('delete'); Route::delete('/folders/{id}/edit/delete', 'TaskController@delete')->name('del'); }); Auth::routes();
index.blade.php
<!DOCTYPE html> <html lang="ja"> @extends('layout') @section('content') <div class="container"> <div class="row"> <div class="col col-md-4"> <nav class="panel panel-default"> <div class="panel-heading">フォルダ</div> <div class="panel-body"> <a href="{{ route('folders.create') }}" class="btn btn-default btn-block"> フォルダを追加する </a> </div> <div class="list-group"> @foreach($folders as $folder) <div class="po"> <a href="{{ route('tasks.index', ['id' => $folder->id]) }}" class="list-group-item {{ $current_folder_id === $folder->id ? 'active' : '' }} mm"> {{ $folder->title }} </a> <form action="{{route('delete',$folder->id)}}" method="post"> @csrf @method('DELETE') <button>削除</button> </div> </form> @endforeach </div> </nav> </div> <div class="column col-md-8"> <div class="panel panel-default"> <div class="panel-heading">タスク</div> <div class="panel-body"> <div class="text-right"> <a href="{{ route('tasks.create', ['id' => $current_folder_id]) }}" class="btn btn-default btn-block"> タスクを追加する </a> </div> </div> <table class="table"> <thead> <tr> <th>タイトル</th> <th>状態</th> <th>期限</th> <th></th> </tr> </thead> <tbody> @foreach($tasks as $task) <tr> <td>{{ $task->title }}</td> <td> <span class="label {{ $task->status_class }}">{{ $task->status_label }}</span> </td> <td>{{ $task->formatted_due_date }}</td> <td><a href="{{ route('tasks.edit', ['id' => $task->folder_id, 'task_id' => $task->id]) }}">編集</a></td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> @endsection
試したこと
Folder.php
ここのtasksでデータベースの情報を取得できると考えています。
belongsToをhasManyにしても同じエラーでできませんでした。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Folder extends Model { // use HasFactory; public function tasks() { return $this->belongsTo('App\Models\Task'); } }
補足情報(FW/ツールのバージョンなど)
Laravel8 を使用