it-swarm.com.ru

Класс '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

Есть идеи, как мне решить проблему? 

42
Peter

Проблема здесь в пространствах имен 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 руководстве

113
Marcin Nabiałek

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

use DB; 

OR

\DB::table...
11
Pedro Lobito

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

use DB;
5
Mamun Rasid

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

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

    }
  }

?>
0
radhason power

Существует проблема в интервале имен как в 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';

}
0
vishal

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

Вот пример:

Use \DB;

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

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