Класс «App\Http\Controllers\DB» не найден, и я также не могу использовать новую модель

У меня очень основная проблема. В L4 приведенные ниже методы работали из коробки, так что теперь я потерян. Пожалуйста помоги. Несколько дней назад я начал проект Laravel 5.0. У меня теперь свежая, чистая установка.

Проблема 1: Когда я пытаюсь получить что-либо из базы данных

$headquote = DB::table('quotation_texts')->find(176);

Я получаю это:

Class 'App\Http\Controllers\DB' not found

Проблема 2: Прежде чем я клонировал модель User.php, я изменил имя класса на «Цитата». Ниже приведено содержимое файла Quotations.php, помещенного в корневую папку приложения:

<?php namespace App;

 use Illuminate\Database\Eloquent\Model;

 class Quotation extends Model  {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'quotation_texts';
}

Любая попытка использовать модель

$headquote = Quotation::find(176);

заканчивается этим:

Class 'App\Http\Controllers\Quotation' not found

Любые идеи, как я могу решить проблему?


person Peter    schedule 17.11.2014    source источник


Ответы (7)


Проблема здесь в пространствах имен PHP. Вам нужно научиться ими пользоваться. Поскольку ваш контроллер находится в пространстве имен App\Http\Controllers, если вы ссылаетесь на какой-либо другой класс, вам нужно добавить обратную косую черту (или правильное пространство имен) или добавить оператор use в начале файла (перед определением класса).

Итак, в вашем случае вы можете использовать:

$headquote = \DB::table('quotation_texts')->find(176);
$headquote = \App\Quotation::find(176);

или добавьте в свой класс контроллера оператор use, чтобы начало вашего класса контроллера могло выглядеть так:

<?php

namespace App\Http\Controllers;

use DB;
use App\Quotation;

Для получения дополнительной информации о пространствах имен вы можете посмотреть Как использовать объекты из других пространств имен и как импортировать пространства имен в PHP или пространства имен в руководстве по PHP

person Marcin Nabiałek    schedule 17.11.2014
comment
Благодарю вас! Дзенкуй!! Я не могу голосовать, так как моя репутация недостаточно высока, извините за это! - person Peter; 17.11.2014
comment
Решение работало только с БД. С моей моделью ситуация сейчас такая: если поставить use Quotation; в контроллере или поставить обратную косую черту в запросе $headquote = \Quotation::find(176); Я получаю это: Класс «Цитата» не найден. До того, как я получил класс «App\Http\Controllers\Quotation», не найден. Это говорит о том, что L% распознает «Цитацию» как имя для контроллера. - person Peter; 17.11.2014
comment
@PiotrPlebaniak Поскольку ваш Quotation, вероятно, находится в пространстве имен App, я отредактировал свой ответ. - person Marcin Nabiałek; 17.11.2014
comment
Теперь это работает, но только как вариант использования App\Quotation;. Это не работает в команде запроса - синтаксическая ошибка, неожиданный '/' - person Peter; 17.11.2014
comment
@PiotrPlebaniak А где у вас здесь /? Это должно быть `` - person Marcin Nabiałek; 17.11.2014
comment
Настоящий вопрос... Почему? Почему ни в одном учебнике мне об этом не сказали, и мне нужно было найти это самому? О \ вещи. - person dawn; 09.10.2018
comment
@dawn Вот как пространства имен работают в PHP. Я добавил ссылку в конце своего ответа на другие ресурсы - person Marcin Nabiałek; 09.10.2018
comment
Спасибо, Марчин. - person drakogemini2; 14.08.2020

Быстро и грязно

use DB; 

OR

\DB::table...
person Pedro Lobito    schedule 16.05.2016

Просто добавьте эту верхнюю часть вашего контроллера.

use DB;
person Mamunur Rashid    schedule 01.08.2016

Попробуйте вот так:

<?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;

    use DB;

    class UserController extends Controller
    {

    function  index(){

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

    foreach ($users as $user)
    {
        var_dump($user->name);
    }

    }
  }

?>
person ranojan    schedule 20.06.2017

Используйте обратную косую черту перед db в заголовке, и вы можете использовать ее, как обычно, как вы написали раньше.

Вот пример:

Use \DB;

Затем внутри вашего класса контроллера вы можете использовать, как и раньше, например:

$item = DB::table('items')->get();
person Marvin Mustafa    schedule 11.06.2017

Существует проблема с интервалом между именами, как в laravel 5.2.3.

use DB;
use App\ApiModel; OR  use App\name of model; 

DB::table('tbl_users')->insert($users); 

OR

DB::table('table name')->insert($users);



model 

class ApiModel extends Model
    {

        protected $table='tbl_users';

}
person vishal    schedule 22.09.2016

Мне нравится делать эту ведьму, я думаю, что она чище:

1 - Добавьте модель в пространство имен:

use App\Employee;

2 - тогда вы можете сделать:

$employees = Employee::get();

или, может быть, что-то вроде этого:

$employee = Employee::where('name', 'John')->first();
person infantry    schedule 21.04.2020