我有非常基本的问题。在L4中,下面的方法开箱即用,所以现在我迷路了。请帮忙。几天前,我开始了一个Laravel 5.0项目。我现在有新鲜,干净的安装。
问题1:当我尝试从数据库中获取任何内容时
$headquote = DB::table('quotation_texts')->find(176);
我明白了:
Class 'App\Http\Controllers\DB' not found
问题2:在克隆User.php模型之前,将类名更改为" Quotation"。以下是放在App根文件夹中的文件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
我有什么想法可以解决这个问题?
答案 0 :(得分:119)
这里的问题是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
答案 1 :(得分:12)
快速而肮脏
use DB;
OR
\DB::table...
答案 2 :(得分:7)
只需添加控制器顶部即可。
use DB;
答案 3 :(得分:1)
尝试这样:
<?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);
}
}
}
?>
答案 4 :(得分: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';
}
答案 5 :(得分:0)
在标题上使用db之前的反斜杠,然后通常可以像以前一样使用它。
以下是示例:
Use \DB;
然后在您的控制器类中,您可以像以前一样使用,例如:
$item = DB::table('items')->get();
答案 6 :(得分:0)
我喜欢做这个我认为更干净的女巫:
1-将模型添加到名称空间:
use App\Employee;
2-那么您可以:
$employees = Employee::get();
或类似的东西:
$employee = Employee::where('name', 'John')->first();