Laravel5:为什么我的模特" Media"需要名为" media"而不是" medias"?

时间:2016-08-29 12:25:14

标签: php laravel laravel-5

来自doc of laravel,声称:

  

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

所以我写道:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Media extends Model
{
    //
}

和控制器:

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

但是当我查询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`)

如文档所述,它需要一个名为media而不是medias的表。那么为什么会发生错误?我是否意外打开选项标志,该标志更改了从模型到表格或类似名称的默认名称映射?

任何建议都将受到赞赏。

环境:

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

3 个答案:

答案 0 :(得分:4)

正如@FrankProvost所说,Laravel(实际上是Doctrine)足够聪明且有hardcoded words that should not be inflected

....
'Kongoese', 'Lucchese', 'mackerel', 'Maltese', '.*?media',
....

因此,使用media表或使用protected $table变量强制medias表名。

答案 1 :(得分:0)

如果您希望您的表在模型“media”中命名为“medias”,请尝试在Class中指定。

class Media extends Model
{
    protected $table = 'medias';
}

答案 2 :(得分:0)

如果您希望您的表名为&#34; medias&#34;在你的模特&#34;媒体&#34;中, 你需要像这样定义受保护的变量

class Media extends Model
{
   protected $table = 'medias';
}