前提・実現したいこと
Laravel5.7で記事へのコメント機能を作っています。
発生している問題・エラーメッセージ
コメントを投稿すると下記のエラーが出ます。
BadMethodCallException Method Illuminate\Http\Request::scene does not exist.
該当のソースコード
SceneCommentController.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\SceneComment; 7 8class SceneCommentController extends Controller 9{ 10 public function store(Request $request) { 11 $scene_comment = new SceneComment; 12 \Debugbar::info(\Route::currentRouteName()); 13 14 15 $scene_comment->comment = $request->comment; 16 $scene_comment->user_id = $request->user()->id; 17 $scene_comment->scene_id = $request->scene()->id; 18 19 $scene_comment->save(); 20 return redirect('ranking/scenes/'.$request->scene->id); 21 } 22}
$scene_comment->user_id = $request->user()->id;
でエラーは出ませんが、
$scene_comment->scene_id = $request->scene()->id;
で上記のエラーが出ます。
app\SceneComment.php
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class SceneComment extends Model 8{ 9 public function user() { 10 return $this->hasOne('App\User'); 11 } 12 13 public function scene() { 14 return $this->belongsTo('App\Scene'); 15 } 16}
web.php
php
1Route::resource('ranking/scenes', 'SceneController'); 2Route::resource('scenecomments', 'SceneCommentController', ['only' => ['store']]);
resources\views\scenes\show.blade.phpのコメントフォーム
php
1<form method="post" action="{{route('scenecomments.store')}}"> 2 @csrf 3 @method('POST') 4 <div class="form-group"> 5 <textarea name="comment" rows="5" style="width: 100%"></textarea> 6 </div> 7 <button type="submit" class="btn btn-primary">投稿する</button> 8 </form>
database\migrations\2019_02_26_072827_create_scenecomment_table.php
php
1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class CreateScenecommentTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('scene_comment', function (Blueprint $table) { 17 $table->increments('id'); 18 $table->string('comment', 255); 19 $table->integer('user_id')->unsigned(); 20 $table->foreign('user_id') 21 ->references('id')->on('users') 22 ->onDelete('cascade'); 23 $table->integer('scene_id')->unsigned(); 24 $table->foreign('scene_id') 25 ->references('id')->on('scenes') 26 ->onDelete('cascade'); 27 $table->timestamps(); 28 }); 29 } 30 31 /** 32 * Reverse the migrations. 33 * 34 * @return void 35 */ 36 public function down() 37 { 38 Schema::dropIfExists('scenecomment'); 39 } 40} 41
試したこと
store()
メソッドの中で\Debugbar::info(\Route::currentRouteName());
info scenecomments.store
store()
メソッドの中で\Debugbar::info($request->user()->id);
info 1
カレンとユーザーのIDです。
補足情報(FW/ツールのバージョンなど)
PHP 7.3.1
Laravel 5.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/27 09:48