【问题标题】:Class 'App\Http\Controllers\DB' not found in Laravel 5 Controller在 Laravel 5 控制器中找不到类“App\Http\Controllers\DB”
【发布时间】:2016-01-11 10:53:38
【问题描述】:

我在将 laravel 5 查询构建器用于员工管理系统时遇到问题。这是我的员工控制器

<?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'));

我在这里看到了answer,我按照建议做了,但没有运气。我添加了使用数据库;在命名空间声明之后,还尝试了带有

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

但它会引发另一个错误,即在第 6 行对非对象调用成员函数 count()。 我什至将 DB.php 文件从 C:\xampp\htdocs\laravel5project\vendor\laravel\framework\src\Illuminate\Support\Facades 复制到 App 文件夹(C:\xampp\htdocs\laravel5project\app)但仍然没有运气。 我也尝试过明确地给它命名空间

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

可能是什么问题?

【问题讨论】:

  • 你想在哪里使用-&gt;count()?我在您的代码中没有看到它。此外,如果您尝试在 null 对象上调用 -&gt;count(),您将收到该错误。此外,使用\DB 将消除标题中的错误。这是一个命名空间问题,可以通过使用 \.不幸的是,您随后又遇到了另一个错误,但它们有些无关。
  • 刚刚包含了对问题的看法
  • 嗯,你是对的。给我带来问题的是视图上的计数功能。

标签: laravel laravel-5


【解决方案1】:

您的控制器中没有设置数据库:

<?php

namespace App\Http\Controllers;

use DB;
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'));
    }
}

【讨论】:

    【解决方案2】:

    DB 不在您当前的命名空间App\Http\Controllers 中。所以你可以在顶部导入它

    use DB;
    

    或在其前面加上反斜杠\DB::table(...)。这样就解决了class not found异常。

    但是,您获得的不是 Laravel 员工模型集合,而是数据库行数组。数组不是具有导致最终错误的 count() 函数的对象。

    更新:Laravel 5.3 将返回一个 Collection 对象,而不是一个数组。所以 count() 可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2015-05-10
      • 2015-06-24
      • 2015-05-21
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 2018-01-03
      相关资源
      最近更新 更多