Laravel5:为什么我的模型“媒体”需要名为“媒体”而不是“媒体”的表?

Say*_*iss 1 php laravel laravel-5

laravel文档中,它声称:

现在,让我们看一个示例Flight模型,我们将使用它从我们的flights数据库表中检索和存储信息

所以我写道:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Media extends Model
{
    //
}
Run Code Online (Sandbox Code Playgroud)

和控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Media;

class MediaController extends Controller
{
    public function index() {
        return view('medias.index')->with('medias', Media::all());
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我查询时MediaController@index,它给出了这个错误:

QueryException in Connection.php line 729:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'myapp.media' doesn't exist (SQL: select * from `media`)
Run Code Online (Sandbox Code Playgroud)

它需要一个命名的表,media而不是medias像文档所说的那样。那么为什么会发生这种错误呢?我是否不小心打开了选项标志,它更改了从模型到表的默认名称映射或类似的东西?

任何建议将不胜感激。


环境:

  • Laravel 框架版本 5.2.43
  • PHP 7.0.8-2+deb.sury.org~xenial+1

Ale*_*nin 5

正如@FrankProvost 所说,Laravel(实际上是 Doctrine)足够聪明,并且具有不应变形的硬编码词

....
'Kongoese', 'Lucchese', 'mackerel', 'Maltese', '.*?media',
....
Run Code Online (Sandbox Code Playgroud)

所以,使用media表或使用protected $table变量来强制medias表名。