2014-11-17 5 views
33

У меня есть основная проблема. В L4 thes ниже методы разработаны из коробки, так что теперь я потерян. Пожалуйста помоги. Несколько дней назад я начал проект Laravel 5.0. У меня есть свежая, чистая установка.Класс «App Http Controllers DB» не найден, и я также не могу использовать новую модель

Проблема 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 

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

+4

'use Illuminate \ Support \ Facades \ DB;' –

ответ

91

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

Для получения дополнительной информации о пространства имен вы можете посмотреть на How to use objects from other namespaces and how to import namespaces in PHP или namespaces in PHP manual

+0

Спасибо! Dziękuję !! Я не могу голосовать, так как моя репутация недостаточно высока, извините за это! – Peter

+0

Решение работает только с БД. С моей моделью ситуация сейчас такова: если я использую Котировку предложения; в контроллере или положить обратную косую черту в quoery $ headquote = \ Quotation :: find (176); Я получаю это: Class 'Quotation' не найден До того, как я получил Класс «App \ Http \ Controllers \ Quotation» не найден Это говорит о том, что L% распознает «Quotation» как имя для контроллера. – Peter

+0

@PiotrPlebaniak Так как ваш 'Quotation', вероятно, находится в пространстве имен' App', я отредактировал свой ответ –

8

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

use DB; 

ИЛИ

\DB::table... 
4

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

use DB; 
0

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

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

Вот пример:

Use \DB; 

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

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

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

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

    } 
    } 

?> 
Смежные вопросы