1. ホーム
  2. laravel

[解決済み] Class 'AppHttpControllers</DB' not found in Laravel 5 Controller

2022-01-30 04:30:17

質問

従業員管理システムでlaravel 5のクエリビルダを使用する際に問題があります。以下は私のEmployeesControllerです。

<?php

namespace App\Http\Controllers;

use App\Employee;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class EmployeesController extends Controller
{

    public function index()
    {
        // $employees = Employee::all();
        // return view('employees.index', compact('employees'));

        $employees = DB::table('employees')->get();

        return view('employees.index', compact('employees'));
    }

}

コメントアウトされたコードを使用すると、ビューが動作し、私の従業員リストを見ることができます。

$employees = Employee::all();
return view('employees.index', compact('employees'));

を見ました。 回答 ここで、提案されたとおりにしましたが、うまくいきません。名前空間宣言の後にuse DB;を追加し、以下のコードも試してみました。

$employees = \DB::table('employees')->get();

しかし、6行目で非オブジェクトのメンバー関数count()への呼び出しという別のエラーを投げてしまいます。 DB.phpをC:³³からAppフォルダ(C:³³)にコピーしてもダメでした。 明示的にnamespaceを付与することも試してみました。

use Illuminate\Support\Facades\DB

以下はその様子です。

@extends('layouts.default')
@section('PageTitle', 'Employee List')
@section('content')

@if ( !$employees->count() )
    There are no Employees!
@else    

<table id="tblEmployee" class="table table-striped table-bordered" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>Name</th>
        </tr>
    </thead>

    <tbody>
        @foreach( $employees as $employee )
        <tr>             
            <td>{{$employee->Name}}</td>
        </tr>
        @endforeach

    </tbody>
</table>

@endif
@endsection

何が問題なのでしょうか?

解決方法は?

DB が現在のネームスペースにない場合 App\Http\Controllers . そのため、トップでそれをインポートすることができます

use DB;

またはその前にバックスラッシュを付ける \DB::table(...) . これにより、クラスが見つからない例外が解決されます。

しかし、あなたは Employee モデルの Laravel Collection ではなく、データベース行の配列を得ています。配列は、count()関数を持つオブジェクトではないので、最終的なエラーになります。

更新:Laravel 5.3は配列ではなく、Collectionオブジェクトを返すようになりました。そのため、count()はその上で動作します。