来自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
的表。那么为什么会发生错误?我是否意外打开选项标志,该标志更改了从模型到表格或类似名称的默认名称映射?
任何建议都将受到赞赏。
环境:
答案 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';
}