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

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

ただいまの
回答率

88.03%

DBの情報を表示したい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 255

score 5

表題の通りDBの情報をビューで表示したいのですが、上手くいかずエラーが発生するため、解決に向けご教示をお願いします。

エラー表示

Undefined variable: employees (View: /var/www/html/laravel-app/resources/views/index.blade.php)

web.php

Route::get('/', function () {
    return view('/index');
});

Auth::routes();

Route::get('/index', 'HomeController@index')->name('index');

Route::group(['middleware' => 'auth'], function () {
    Route::resource('goods', 'GoodsController', ['only' => ['create', 'store', 'destroy']]);
    Route::resource('employee', 'EmployeesController', ['only' => ['index']]);
});

Employee.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{
    protected $fillable = ['emlpoyee_id','employee_name'];

    public function goods()
    {
        return $this->hasMany(Goods::class);
    }
}

EmployeesController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Goods;
use App\Employee;

//class GoodsController extends Controller
class EmployeesController extends Controller

{
    public function index()
    {
        $employees = Employee::orderBy('id','desc')->get();

        return view('index', [
            'employees' => $employees,
        ]);
    }
}

index.blade.php

extends('layouts.app')

@section('content')

  <table class="table table-hover">
    <thead class="thead-dark">
      <tr>
        <th scope="col">社員番号</th>
        <th scope="col">氏名</th>
        <th scope="col" colspan="4">貸与品</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>111</td>
        <td>山田</td>
        <td>制服</td>
        <td>上着</td>
        <td></td>
        <td>その他</td>
      </tr>
    </tbody>

    <tbody>
    @foreach($employees as $employee)
      <tr>
        <td scope="row">{{ $employee->employee_id }}</td>
        <td scope="row">{{ $employee->employee_name }}</td>
      </tr>
    @endforeach
    </tbody>
  </table>

@endsection

各ルート

イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • plusninesty

    2021/01/27 15:04

    phper.k 様
    大変失礼いたしました。web.phpのみ修正いたしました。

    エラー画面としては、
    ■index.blade.phpの
    「 @foreach($employees as $employee) 」がエラー示している状態です。

    キャンセル

  • phper.k

    2021/01/27 15:10

    '`EmployeesController' <- ここに余計な「`」 があるけど、手元の状況と同じ?

    キャンセル

  • plusninesty

    2021/01/27 15:25

    手元でも「`」がありましたので、削除しましたが変わりない状態です。

    キャンセル

回答 1

0

web.phpで以下のように定義しているので、/employeeにアクセスした場合だけEmployeesController経由で
index.blade.phpを表示します。

Route::resource('employee','EmployeesController',['only'=>['show']]);


※追記:ここ、indexアクションの指定が足りていませんね。

EmployeesControllerを経由しないurlではemployeesに値が入らないので該当のエラーが出ます。
/indexでもエラーを回避したいのであれば@isset等でemployeesの有無を判定してください。

バージョン違うかも知れませんが公式ドキュメントのリソースコントローラを参照してください。
https://readouble.com/laravel/5.7/ja/controllers.html

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/01/27 15:35 編集

    画像追記いたしました。
    再度ご確認の程宜しくお願いします。

    キャンセル

  • 2021/01/27 15:52

    コマンド結果画像を見たところルーティングはあっているので、404が出る原因はソースにはないかも知れません。
    私は出くわしたことがない現象なので他の方の解決方法になりますが以下のようなブログが参考になるかも知れません。
    http://peacock.ky-3.net/laravel/laravel_404notfound
    https://qiita.com/isaatsu0131/items/f1eafe7522f0bf0ff043
    「laravel ルーティング 404」等でググってみてください。

    キャンセル

  • 2021/01/27 16:50

    原因は他にもあるようなのですね。引き続き模索してみます。
    色々お時間いただきありがとうございました^^

    キャンセル

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

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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