prococo
@prococo (Sanma)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Class 'App\Models\User' not found を解決したいです。

解決したいこと

laravel 6 で投稿一覧表示画面を製作中している際、一覧表示用のコントローラを作成後に、home.blade.phpに手を加えるとエラーが発生しました。エラーを解決して一覧画面を表示させたいです。

スクリーンショット 2021-09-27 15.07.23.png

該当するソースコード

home.blade.php
@extends('layouts.app')
@section('content')
    @foreach ($posts as $post)
        <div class="container-fluid mt-20" style="margin-left:-10px;">
            <div class="row">
                <div class="col-md-12">
                    <div class="card mb-4">
                        <div class="card-header">
                            <div class="media flex-wrap w-100 align-items-center">
                                <div class="media-body ml-3"> {{ $post->title }}
                                    <div class="text-muted small">{{ $post->user->name }}</div> <!--リレーションしている為postモデルからuserを呼び出せる-->
                                </div>
                                <div class="text-muted small ml-3">
                                    <div>投稿日</div>
                                    <div><strong>{{$post->created_at->diffForHumans()}}</strong></div>
                                </div>
                            </div>
                        </div>
                        <div class="card-body">
                            <p>{{$post->body}}</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    @endforeach
@endsection

上から11行目あたりからの記載でエラーになりました。下記に記載します。

home.blade.php
<div class="text-muted small">{{ $post->user->name }}</div>
HomeController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Models\Post;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $posts=Post::all();
        $user=auth()->user();
       return view('home',compact('posts','user'));
    }
}
User.php
<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function posts(){
        return $this->hasMany('App\Models\Post');//一対多の多 リレーション
    }
}

自分で試したこと

参考にしている動画を見返したり、同じエラー「Class 'App\Models\User' not found」で悩んでいる方の質問等を参考にしましたが解決できませんでした。

どなたかご教授いただけないでしょうか。
宜しくお願い致します。

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

laravel 6 、mysql

0

2Answer

App\Models\Postのコードが無いので推測ですが、その中のuse文やリレーションに問題は無いでしょうか?
エラーメッセージとHomeContolloerのuseに差異が見られます。

エラー: Class 'App\Models\User' not found

HomeController.php
use App\User;
0Like

Comments

  1. @prococo

    Questioner

    前回に引き続きコメント頂き誠に有り難うございます!!
    今回、下記に投稿している内容のように私のミスでリレーションの記載に誤りがありました。

    また、私が参考にしている動画ではlaravel8を使用しており、新規プロジェクト作成時点でUser.phpがModelsフォルダ内に作成されています。また、私はlaravel6を使用している為デフォルトでModelsフォルダ内にUser.phpが作成されないようで、今回のようなミスを起こしてしまいました。

    今後も質問を投稿することがあると思いますが引き続き、お手隙の際にご教授いただけば幸いです。
    何卒宜しくお願い申し上げます。

###解決できました!!!
@sgkohata様と@blue32a様のご協力により解決致しました!

Post.phpを確認した所、User.phpがAppフォルダ直下にあるにも関わらず、

スクリーンショット 2021-09-28 0.35.41.png

Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Post extends Model
{
    //
    public function user(){
        return $this->belongsTo('App\Models\User');//リレーション

    }
}

return $this->belongsTo('App\Models\User');

と記載しており

return $this->belongsTo('App\User');

Modelsを消すことでエラーを解決致しました。

0Like

Your answer might help someone💌