Laravel 9にTwitterのような投稿アプリケーションを作製中、コメント機能を実装したい。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • Laravel9のメッセージ投稿アプリケーションにコメント機能を実装する

前提

現在Webアプリケーションを学習しており、
Laravel9でTwitterのようなメッセージ投稿アプリーケーションを作成しています。
基本的なメッセージ投稿機能は実装済みです。
投稿された任意のメッセージにコメントを行う機能を呼び出したときにエラーが起きます。

発生している問題・エラーメッセージ

Viewファイルから'content' 以外のデータは受け取れているのですが、なぜか'content'だけ受け取ってくれず、null制約違反でエラーがでてしまいます。

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "content" of relation "comments" violates not-null constraint DETAIL: Failing row contains (12, 2023-07-31 15:42:21, 2023-07-31 15:42:21, 471, 7, null). INSERT INTO "comments" ( "post_id", "user_id", "content", "updated_at", "created_at" ) VALUES (8, 471, ?, 2023 -07 -31 15: 15: 02, 2023 -07 -31 15: 15: 02) returning "id"

該当のソースコード

Model

public function comments() { return $this->hasMany(Comment::class, 'content', 'user_id', 'post_id'); }

Controller

public function store(Request $request) { $request->validate([ 'content' => 'required|max:255', ]); $request->user()->comments()->create([ 'post_id' => $request->post_id, 'user_id' => $request->user_id, 'content' => $request->content, ]); return back(); }

View

<form method="POST" action="{{ route('comments.store') }}"> @csrf <div class="form-group row mb-0"> <div class="col-md-12 p-3 w-100 d-flex"> <div class="ml-2 d-flex flex-column"> <p class="mb-0">{{ $user->name }}</p> </div> </div> <div class="col-md-12"> <input type="hidden" name="post_id" value="{{ $post->id }}"> <input type="hidden" name="user_id" value="{{ $user->id }}"> </div> @csrf <div class="flex"> <div class="form-control my-4 w-1/2"> <label for="content" class="label"> <span class="label-text">メッセージ:</span> </label> <textarea type="content" name="content" class="input input-bordered w-full" placeholder="メッセージ入力"></textarea> <p class="text-left text-gray-500 text-sm">最大255文字</p> </div> </div> <button type="submit" class="btn rounded-lg bg-sky-500 hover:bg-cyan-500 text-white"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5" /> </svg>送信 </button> </form>

試したこと

一通りのLaravelの文献を調査し、ViewやControllerのコードを書き換えましたがうまく動作してくれません。

コメントを投稿

0 コメント