jankenpon0205
@jankenpon0205 (002 ruru)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

更新処理機能を実装したい

Q&A

Closed

解決したいこと

課題で出されたものと動画を参考に更新機能を実装したのですが、写真のようなエラーが出てしまいました。
どうすれば更新機能が実装できるのか教えてください!

image.png

githubのURLも下記に載せますので、訂正箇所がありましたら教えていただきますと幸いです。
https://github.com/Rune2525/project001.git

追記:先のスレッド https://qiita.com/jankenpon0205/questions/94e58bcb582635a36dd2 の続きであること、先のスレッドの問題は回答をもらって解決したが新たに別の問題が出た、このスレッドは新たに出た別の問題に関する質問です。誰か教えていただけませんか?

index.blade.php

@extends('layouts.app')

@section('content')
<div class="card-header">Board</div>

<div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

            @foreach($posts as $post)
            <div class="card">
            <div class="card-body">
                <h5 class="card-title">{{ $post->title }}</h5>
                <h5 class="card-title">
                    カテゴリー:{{ $post->category->category_name }}
                </h5>
                <h5 class="card-title">
                    投稿者:{{ $post->user->name }}
                </h5>
                <p class="card-text">{{ $post->content }}</p>
                <a href="/post/{{ $post->id }}/update-form" class="btn btn-primary">更新</a>
            </div>
            </div>
            @endforeach
                </div>
@endsection
 

PostController.php

public function create(Request $request)
    {
        $post = $request->input('newPost');
 
DB::table('posts')->insert([
 
'post' => $post
 
]);
 
return redirect('/index');
    }

    '''中略'''
public function updateForm($id)
    {
        $post = DB::table('posts')
 
        ->where('id', $id)
 
        ->first();
 
        return view('posts.updateForm', ['post' => $post]);
 
    }

    public function update(Request $request)
 
{
 
$id = $request->input('id');
 
$up_post = $request->input('upPost');
 
DB::table('posts')
 
->where('id', $id)
 
->update(
 
['post' => $up_post]
 
);
 
return redirect('/index');
 
}

web.php

Route::post('post/create', [PostController::class,
'create']);

Route::get('post/{id}/update-form', [PostController::class, 'updateForm']);

Route::post('post/update', [PostController::class,
'update']);

updateForm.blade.php

@extends('layouts.app')

@section('content')
<div class="card-header">Board</div>

<div class="card-body">
{!! Form::open(['url' => '/post/update']) !!}
 
 <div class="form-group">
  
 {!! Form::hidden('id', $post->id) !!}
  
 {!! Form::input('text', 'upPost', $post->post, ['required', 'class' => 'form-control']) !!}
  
 </div>
  
 <button type="submit" class="btn btn-primary pull-right">更新</button>
  
 {!! Form::close() !!}
                </div>
@endsection

自分で試したこと

マイグレーションの確認をしましたが、「Nothing to migrate.」と表示されるだけで、エラーが解決できませんでした
image.png

0

3Answer

こんばんは!

Table 定義が posts となっておりますが、post にアクセスしているというエラーになっております。
こちら Github 上のコードと Qiita に添付されているコードが異なるようですが、ただ保存できていないだけということはありませんか?
該当箇所: https://github.com/Rune2525/project001/blob/master/app/Http/Controllers/PostController.php#L90
テーブル定義: https://github.com/Rune2525/project001/blob/master/database/migrations/2024_08_13_141303_create_posts_table.php#L16

Github 上は DB::table('post') (誤) ですが、 Qiita には DB::table('posts') (正)と記載されているので、問題ないように思います!

もしこちらが保存・反映されているにもかかわらず同様のエラーが出るようであれば、Stacktrace (どのファイルの何行目で発生している) の情報を全て載せていただけますと解決しやすくなるかと思います!

2Like

エラーメッセージにBase table or view not foundとあるので、その通りに「postというテーブルまたはビューが無い」という状況でしょう。

よくあるケースは「実際に作成したテーブル名と指定したテーブル名が異なる」「そもそもテーブルが作成していない」というのがあります。
まずはデータベースのテーブルがどうなっているか確認してみましょう。

プログラムをしていて起こる問題を解決するには、まずはエラーメッセージを読むことです。英語のエラーメッセージに対して抵抗がある人がいますが、これを読むようにしない自分で解決できるようになりません(つまり上達しません)。
また、エラーメッセージで検索するのも有効です。大抵のエラーはすでに誰かがつまずいて解決しています。
そのうえで「自分で試したこと」として記載しておくと解決のためのヒントにもなります。

2Like

画像のエラーメッセージは、データベースに、

select * from `post` where `id` = 1 limit 1

という select クエリを投げたがデータベースに post というテーブルがないと言ってます。

(「更新機能を実装した」のに何故 select クエリになるのか? 質問に提示されているコードには該当するものが見つからないのは何故?・・・というのはちょっと置いといて)

データベースは MySQL だと思いますが、であればコマンドラインから post テーブルが存在するか否かを調べてみてはいかがですか? 以下のような感じ:

MySQL.jpg

1Like

Your answer might help someone💌