質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

解決済

掲示板サイトのコメントが表示されない

ishidakouiki
iiii

総合スコア44

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

1回答

0評価

0クリップ

123閲覧

投稿2022/05/03 05:29

掲示板サイトの実装を行なっていて、
コメント機能の実装でindex.blade.phpに投稿したコメントが表示されない状態で、
indexblade.phpに
Invalid argument supplied for foreach() (View: /Applications/MAMP/htdocs/bike/resources/views/posts/index.blade.php)
とエラーが表示されます。
foreach()に無効な引数が指定されました.
forreach()中の無効な引数→$post->comments の値が入っていないという意味なのでしょうか?
DBを確認すると、投稿したコメントは反映されている状態です。
イメージ説明
またpost(投稿)機能のcrudは正常に機能している状態です。

index.blade.php

〜省略〜 @foreach ($posts as $post) <div class="col-md-8 col-md-2 mx-auto"> <div class="card-wrap"> <div class="card mt-3"> <div class="card-header align-items-center d-flex"> <a class="no-text-decoration" href=""> <i class="fas fa-user-circle fa-2x mr-1"></i> </a> <a class="black-color" title="" href=""> <strong> 出品者 </strong> </a> </div> 〜省略〜 <h3 class="h5 title"> {{ $post->name }} </h3> <div class="mb-5"> {{ $post->year }} </div> <div class="mb-5"> {{ $post->price }} </div> <div class="mb-5"> {{ $post->explanation }} </div> <section> {{-- <span class="help-block"> @include('commons.error_messages') </span> --}} @foreach($post->comments as $comment) <div class="container mt-4 text-left"> <div class="border-top p-1"> <span> @if (Auth::id() == $comment->user->id) <div class="post_edit"> <form class="edit_button" method="get" action="{{ route('comments.edit', $comment->id ) }}"> @csrf <button class="btn btn-size btn-primary"><i class="far fa-edit"></i>編集</button> </form> <form class="edit_button" method="post" action="{{ route('comments.destroy', $comment->id )}}" accept-charset="UTF-8"> @csrf @method('DELETE') <button type="submit" class="btn btn-size btn-danger" rel="nofollow" ><i class="far fa-trash-alt"></i>削除</button> </form> </div> @endif <strong> <a class="no-text-decoration black-color" href="{{ route('users.show', $comment->user->id ) }}"> {{$comment->user->name}} </a> </strong> </span> <div class="comments mt-1"> <span> {{$comment->comment}} </span> </div> </div> </div> @endforeach <div id="comment-post-1"> <div class="m-4"> <form class="w-100" action="{{ route('comments.store') }}" method="post"> @csrf <input name="utf8" type="hidden" value=""/> <input value="" type="hidden" name="user_id" /> <input value="{{ $post->id }}" type="hidden" name="post_id" /> <input name="comments[{{ $post->id }}]" value="{{ old("comments.$post->id") }}" class="form-control comment-input border border-light mx-auto" placeholder="コメントを入力する"> </input> <div class="text-right"> <input type="submit" value="&#xf075;コメント送信" class="far fa-comment btn btn-default btn-sm"> </input> </div> </form> </div> </div> </section> </div> </div> </section> @endforeach @endsection

web.php

~省略~ Route::get('bike/new','PostsController@index')->name('post.index');//バイク販売ページ表示// Route::get('post/new','PostsController@create')->name('post.create');//バイク投稿ページ表示// Route::post('/','PostsController@store')->name('post.store');//バイク投稿機能// Route::get('post/{id}/edit','PostsController@edit')->name('post.edit');//バイク投稿情報編集機能// Route::post('post/{id}','PostsController@update')->name('post.update');//バイク投稿更新機能// Route::delete('post/{id}','PostsController@delete')->name('post.destroy');//バイク投稿削除機能// Route::post('comments', 'CommentsController@store')->name('comments.store');//コメント投稿機能// Route::get('comments/{id}/edit', 'CommentsController@edit')->name('comments.edit'); Route::put('comments/{id}', 'CommentsController@update')->name('comments.update'); Route::delete('comments/{id}', 'CommentsController@destroy')->name('comments.destroy');

PostController.php(投稿)

<?php class PostsController extends Controller { public function index() { $posts = Post::orderBy('created_at', 'desc')->get(); return view('posts.index', ['posts' => $posts]); } public function create() { return view('posts.create'); } public function store(PostRequest $request) { $post = new Post(); $post->user_id = Auth::id(); $post->name = $request->name; $post->year = $request->year; $post->price = $request->price; $post->explanation = $request->explanation; $post->save(); return redirect()->route('index'); } public function edit($id) { //indexから渡されたidのpostテーブル情報を全て取得 $post = post::find($id); //取得したユーザーidと認証しているidが違う場合トップページに戻りエラー表示を出す if($post->user_id !== \Auth::id()){ return redirect()->route('index') ->with('error', '許可されていない操作です'); } //editページに画面遷移しpost情報を渡す return view('posts.edit', compact('post')); } public function update(PostRequest $request, $id){ //postテーブルから自分のidのテーブル情報を取得 $post = Post::find($id); //認証しているuser_idと投稿したidが等しかったら変更内容をDBに保存 if( Auth::id() == $post->user_id) { $post->name = $request->name; $post->year = $request->year; $post->price = $request->price; $post->explanation = $request->explanation; $post->save(); return redirect()->route('index'); } return redirect()->route('index')->with('error', '許可されていない操作です'); } public function delete($id) { $post = post::find($id); if(Auth::id() == $post->user_id) { $post -> delete(); return redirect()->route('index'); } return redirect()->route('index')->with('error','許可されていない操作です'); } }

CommentsController.php

<?php class CommentsController extends Controller { public function store(CommentPostRequest $request) { $comment = new Comment(); $comment->user_id = Auth::id();//認証しているuser_idを$commnetのuser_idに入れる $comment->post_id = $request->post_id;// $comment->comment = $request->comments[$request->post_id]; $comment->save(); return redirect()->route('index'); } public function edit($id) { $comment = Comment::findOrFail($id); return view('comments.edit', compact('comment')); } public function update(CommentEditRequest $request, $id) { $comment = Comment::findOrFail($id); if(Auth::id() == $comment->user->id){ $comment->comment = $request->comments; $comment->save(); return redirect()->route('index'); } return redirect()->route('index') ->with('error', '許可されていない操作です'); } public function destroy($id) { $comment = Comment::findOrFail($id); if(Auth::id() !== $comment->user->id){ return redirect()->route('index') ->with('error', '許可されていない操作です'); } $comment -> delete(); return redirect()->route('index'); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

phper.k

2022/05/03 05:48 編集

Models/Post.php の中身がひつようですね リレーションの設定していないのでは?
ishidakouiki

2022/05/03 06:34

Post.phpの記述内容に間違いがありました! ご指摘いただきありがとうございました!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト