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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

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

解決済

Laravelの$requestから独自に定義したモデルのメソッドを呼び出せる理由がわからない

suika11
suika11

総合スコア166

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

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

1回答

0評価

0クリップ

234閲覧

投稿2022/01/09 06:59

編集2022/01/09 09:09

前提・実現したいこと

下記リンクのフォームの送信情報をデータベースに保存する処理内で、$request->user()とありますが、なぜ$requestから独自に定義したuser()を呼び出せるかがわかりません。
Laravel で簡単な掲示板を作る

該当のソースコード

Laravel

public function store(Request $request) { $request->validate([ 'title' => 'required|string|max:255', 'body' => 'required|string|max:512', ]); DB::transaction(function () use ($request) { $thread = $request->user()->threads()->create([ 'title' => $request->title, ]);

Laravel

class Comment extends Model { use HasFactory; protected $fillable = [ 'body', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }

Laravel

dd($request)の結果 Illuminate\Http\Request {#43 ▼ +attributes: Symfony\Component\HttpFoundation\ParameterBag {#45 ▶} +request: Symfony\Component\HttpFoundation\InputBag {#44 ▶} +query: Symfony\Component\HttpFoundation\InputBag {#51 ▶} +server: Symfony\Component\HttpFoundation\ServerBag {#47 ▶} +files: Symfony\Component\HttpFoundation\FileBag {#48 ▶} +cookies: Symfony\Component\HttpFoundation\InputBag {#46 ▶} +headers: Symfony\Component\HttpFoundation\HeaderBag {#49 ▶} #content: null #languages: null #charsets: null #encodings: null #acceptableContentTypes: null #pathInfo: "/threads/create" #requestUri: "/threads/create" #baseUrl: "" #basePath: null #method: "POST" #format: null #session: Illuminate\Session\Store {#320 ▶} #locale: null #defaultLocale: "en" -preferredFormat: null -isHostValid: true -isForwardedValid: true -isSafeContentPreferred: null #json: null #convertedFiles: [] #userResolver: Closure($guard = null) {#287 ▶} #routeResolver: Closure() {#295 ▶} basePath: "" format: "html" }

補足情報(FW/ツールのバージョンなど)

PHP 8.1.1
Laravel 8.78.1

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

m.ts10806

2022/01/09 08:16

ちなみに自身で組んで $request をdd()で確認してみたりしましたか?(あくまで状況証拠にしかならないですが) フレームワークのコードを追っていくのが自身の理解にも繋がりそうですが、DI関係してそうには思います。
suika11

2022/01/09 09:00

コメント頂くまでは確認してませんでした。確認してみるとuser()の呼び出し元になりそうなものはありませんでした
m.ts10806

2022/01/09 09:04

念のためdd()の結果を質問本文に提示してもらって良いですか?
suika11

2022/01/09 09:10

追記しました
m.ts10806

2022/01/09 09:10

userResolver とかそれっぽいの持ってません?
suika11

2022/01/09 09:19 編集

すいません、関係があると気づけませんでした。これはどういう理屈でuser()を呼び出せるのでしょうか?

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

PHP

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