使用Laravel all()调用正确的数据库表

时间:2015-02-12 14:42:43

标签: php mysql laravel laravel-5

我刚刚开始使用Laravel 5.我正在尝试设置一个从数据库表中检索所有数据的基本页面。我有一个表呼叫人,我有一个名为ContactController.php的控制器。控制器具有以下代码:

<?php namespace App\Http\Controllers;

use App\Contact;
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

class ContactController extends Controller {

    public function index()
    {

        $people = Contact::all();

        return $people;

    }
}

当我访问我的页面时,出现以下错误:

QueryException in /home/vagrant/sites/laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php line 614:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'homestead.contacts' doesn't exist (SQL: select * from `contacts`)

为什么要尝试访问homestead.contacts?我的桌子叫人。我从未创建过一个名为contacts的表。它从哪里绘制表名称,如何更正?

感谢。

3 个答案:

答案 0 :(得分:3)

来自docs

的引用
  

请注意,我们没有告诉Eloquent我们的用户模型使用哪个表。除非明确指定了其他名称,否则该类的小写复数名称将用作表名。

因此,如果您没有定义任何其他内容,Laravel将采用您的类名的复数snake_case版本:

Contact      =>     contacts
FooBar       =>     foo_bars

要解决您的问题,请相应更改型号名称。在这种情况下,Person将让Laravel搜索表people

或者在模型中明确指定表格:

class Contact extends Eloquent {
    protected $table = 'people';
}

答案 1 :(得分:0)

您的app/Contact.php型号中是否有正确的表格名称?

protected $table = 'people';

或者您使用的是错误的型号?

答案 2 :(得分:0)

将以下行添加到您的联系人模型(app / Contact.php)。

protected $table = 'people';

这样可行。