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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

2436閲覧

Laravel 5.7 モデルで定義しているメソッドがdoes not existになる

red_saka

総合スコア15

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2019/02/27 04:31

前提・実現したいこと

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$request->user()はリクエストからAuth::user()を取るためのヘルパーです。
そこにUserオブジェクトが戻ってきて、そのidをとっているんですね。

リクエストにscene_idみたいなパラメーターが来ているなら、$request->scene_idまたは$request->get('scene_id')で取得できます。

リクエストで来ているすべてのデータは$request->all()で検討できます。

投稿2019/02/27 04:45

Bremenkanp

総合スコア205

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red_saka

2019/02/27 09:48

ありがとうございます。 フォームに <input type="hidden" name="scene_id" value="{{$scene->id}}"> を追加して解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問