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

Calling Correct Database Table with Laravel all()

我才刚刚开始 Laravel 5。我正在尝试设置一个从数据库 table 检索所有数据的基本页面。我有一个 table 呼叫人员,我有一个名为 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?我的table叫人。我从未创建过 table 联系人。它从哪里绘制 table 名称,我该如何更正它?

谢谢。

您的 app/Contact.php 模型中的 table 名称是否正确?

protected $table = 'people';

还是您用错了型号?

引自docs

Note that we did not tell Eloquent which table to use for our User model. The lower-case, plural name of the class will be used as the table name unless another name is explicitly specified.

因此,如果您没有定义任何其他内容,Laravel 将采用您的 class 名称的复数形式 snake_case:

Contact      =>     contacts
FooBar       =>     foo_bars

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

或在您的模型中明确指定 table:

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

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

protected $table = 'people';

这会起作用。