laravelでリレーションを使用してposts,commentテーブルを繋ぎ、投稿のコメント欄の制作をしています。
showページでコメントの入力をすると投稿表示されず、**SQLSTATE[42S22]: Column not found: 1054 Unknown column 'post_id' in 'field list' (SQL: insert into posts
(post_id
, comment
, updated_at
, created_at
) values (32, ああ, 2020-07-23 10:18:14, 2020-07-23 10:18:14))**と出てしまいました。
commentとpost_idはhiddenでformから受け取っています。
リレーションのデータをdbに保存したりすることがうまくいっていないと思うので、アドバイスいただけるとありがたいです。
show.blade.php
@extends('layouts.app') @section('title', '詳細記事') @section('content') <div class="container mt-4"> <div class="border p-4"> <img src="{{ asset('storage/post_image/' . $post->path) }}"> <h1 class="h5 mb-4"> {{ $post->title }} </h1> <p class="mb-5"> {!! nl2br(e($post->body)) !!} </p> <section> <h2 class="h5 mb-4"> コメント </h2> {{ Form::open(['action' => 'CommentController@store', 'method' => 'post']) }} {{ Form::textarea('comment', '', ['id' => 'body', 'size' => '50x3']) }} {{ Form::hidden('post_id',$post->id) }} <div> {{ Form::submit('コメントする', ['class' => 'btn btn-primary']) }} </div> {{ Form::close() }} @forelse((array)$post->comments as $comment) <div class="border-top p-4"> <time class="text-secondary"> {{ $comment->created_at->format('Y.m.d H:i') }} </time> <p class="mt-2"> {!! nl2br(e($comment->commetnt)) !!} </p> </div> @empty <p>コメントはまだありません。</p> @endforelse </section> </div> </div> @endsection
index.blade.php
@extends('layouts.app') @section('title', '投稿アプリ') @section('content') @section('maincopy', '投稿してください') <!-- form --> {{ Form::open(['action' => 'PostController@index', 'method' => 'post' , 'enctype' => 'multipart/form-data']) }} <p>タイトル<br/>{{ Form::text('title', '', ['id' => 'title', 'size' => 50]) }}</p> <p>内容<br/>{{ Form::textarea('body', '', ['id' => 'body', 'size' => '50x3']) }}</p> {{ Form::file('path') }} <div> {{ Form::submit('投稿', ['class' => 'btn btn-success btn-lg']) }} </div> {{ Form::close() }} </div> </section> <!-- 投稿部分 --> @if(count($items) > 0) @foreach($items as $item) <a href="{{ route('post.show', [$item->id]) }}"> <div class="album py-5 bg-light"> <div class="container"> <div class="row"> <div class="col-md-4"> <div class="card mb-4 shadow-sm"> <img src="{{ asset('storage/post_image/' . $item->path) }}"> <div class="card-body"> <p class="card-text">{{ $item->title}}</p> <p class="card-text">{{ $item->body}}</p> <div class="d-flex justify-content-between align-items-center"> <div class="btn-group"> <button type="button" class="btn btn-sm btn-outline-secondary">編集</button> <button type="button" class="btn btn-sm btn-outline-secondary">削除</button> </div> @if ($item->comment->count()) <span class="badge badge-primary"> コメント {{ $item->comment->count() }}件 </span> @endif <small class="text-muted">{{ $item->created_at}}</small> </div> </div> </div> </div> </div> </div> </div> </a> @endforeach @else <div>投稿記事がありません</div> @endif @endsection
CommentController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\CommentRequest; use App\Models\Post; use App\Models\Comment; class CommentController extends Controller { public function store(CommentRequest $request) { $post = Post::findOrFail($request->post_id); $post->comment = $request->comment; $post->save(); return redirect()->route('post.show', compact('post')); } }
comment.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Comment extends Model { protected $fillable = [ 'comment', 'post_id', ]; public function post() { return $this->belongsTo('App\Models\Post'); } }
post.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $fillable = [ 'title', 'body', 'path', ]; public function comment() { return $this->hasMany('App\Models\Comment'); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。