コード ```### 前提・実現したいこと こんにちは。 現在Laravel6にてアプリの中のコメント機能を実装しており,その中で削除機能(論理削除)をつけようとしています。内部では削除ができているようなのですが,view側では投稿が残ってしまい,1回目以降削除を行おうとするとエラーが発生します。 ### 発生している問題・エラーメッセージ
エラーメッセージ Symfony\Component\Debug\Exception\FatalThrowableError
Call to a member function delete() on null
https://b17703b4956f4d149f4f7aeada1fb430.vfs.cloud9.us-east-2.amazonaws.com/artists/1/1/2
### 該当のソースコード ```ここに言語名を入力 PHP ソースコード<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Post; use App\Artist; use App\SongTitle; use App\Lyric; class PostController extends Controller { public function store(Request $request, $artist_id, $song_title_id, Post $post) { $input = $request['post']; $post->fill($input)->save(); return redirect('/artists/'.$artist_id.'/'.$song_title_id); } public function destroy($artist_id, $song_title_id, $post_id) { Post::find($post_id)->delete(); return redirect('/artists/'.$artist_id.'/'.$song_title_id); } } ```ここに言語を入力 コード
@extends('layouts.app')
@section('content')
<h1>{{ $lyric->name }}</h1>
<div class="lyric">
<img src="{{ asset($lyric->body) }}">
</div>
<h1>コメント</h1> <div class='posts'> @foreach ($posts as $post) <div class='post'> <h2 class='title'>{{ $post->name }}</h2> <p class='body'>{{ $post->content }}</p> <form style="display: inline-block;" method="POST" action="/artists/{{ $artist_id }}/{{ $song_title_id }}/{{ $post->id }}"> @csrf @method('DELETE') <button class="btn btn-danger">削除する</button> </form> </div> @endforeach <form action="/artists/{{ $artist_id }}/{{ $song_title_id }}" method="POST"> @csrf <div class="name"> <h2>ユーザーネーム</h2> <input type="text" name="post[name]" placeholder="タイトル"/> </div> <div class="content"> <h2>内容</h2> <textarea name="post[content]" placeholder="コメント"></textarea> </div> <input type="submit" value="保存"/> </form> </div>
@endsection
コード ```<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use softDeletes; protected $fillable = ['name', 'content']; public function getPaginateByLimit(int $limit_count = 10) { return $this->orderBy('updated_at', 'DESC')->paginate($limit_count); } } ```ここに言語を入力 コード ```<?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! | */ Auth::routes(); Route::get('/', 'MypageController@index') -> middleware('auth'); Route::get('/artists', 'ArtistController@index'); Route::get('/artists/search', 'ArtistController@search'); Route::get('/artists/{artist_id}/{song_title_id}', 'LyricController@show'); Route::get('/artists/{artist}', 'SongTitleController@index'); Route::post('/artists/{artist_id}/{song_title_id}', 'PostController@store'); Route::delete('/artists/{artist_id}/{song_title_id}/{post_id}', 'PostController@destroy'); ```ここに言語を入力 コード
MariaDB []> select * from posts;
+----+--------------+---------+---------------------+---------------------+---------------------+
| id | name | content | created_at | updated_at | deleted_at |
+----+--------------+---------+---------------------+---------------------+---------------------+
| 1 | ああああ | aaaaa | 2021-08-07 07:07:27 | 2021-08-10 13:14:58 | 2021-08-10 13:14:58 |
| 2 | ああああ | aaaa | 2021-08-09 14:44:14 | 2021-08-10 16:00:05 | 2021-08-10 16:00:05 |
| 3 | aaaa | aaaa | 2021-08-10 13:43:46 | 2021-08-10 16:00:13 | 2021-08-10 16:00:13 |
| 4 | aaaa | a | 2021-08-11 02:22:21 | 2021-08-11 02:23:55 | 2021-08-11 02:23:55 |
| 5 | ああああ | aaaaa | 2021-08-12 05:27:08 | 2021-08-12 05:27:31 | 2021-08-12 05:27:31 |
| 6 | ああああ | aaaa | 2021-08-12 06:57:29 | 2021-08-12 07:05:14 | 2021-08-12 07:05:14 |
+----+--------------+---------+---------------------+---------------------+---------------------+
6 rows in set (0.00 sec)
コード ```<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Lyric; use App\SongTitle; use App\Post; class LyricController extends Controller { public function show($artist_id, $song_title_id) { $lyric = SongTitle::find($song_title_id)->lyrics; $posts = \DB::table('posts')->get(); dd($posts); return view('Lyric.show')->with(['lyric' => $lyric, 'posts' => $posts, 'artist_id' => $artist_id, 'song_title_id' => $song_title_id]); } }
試したこと
ddし,各idと引数の関係が一致していることを確認しました。
補足情報(FW/ツールのバージョンなど)
当方teratailを初めて使用したため,質問に不備等あるかもしれませんがご容赦くださいませ。
回答1件
あなたの回答
tips
プレビュー