From the doc of laravel, it claims:
Now, let's look at an example
Flight
model, which we will use to retrieve and store information from ourflights
database table
So I wrote:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Media extends Model
{
//
}
And controller:
<?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());
}
}
But when I query MediaController@index
, it gives that error:
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`)
It requires a table named media
instead of medias
as document said. So why that errors happened? Do I accidentally open option flag which changed the default name mapping from model to table or something similar?
Any suggestion will be appreciated.
Environment:
As @FrankProvost said, Laravel (Doctrine, actually) is smart enough and has hardcoded words that should not be inflected:
....
'Kongoese', 'Lucchese', 'mackerel', 'Maltese', '.*?media',
....
So, use media
table or use protected $table
variable to force medias
table name.
If you want that your table is named "medias" in your model "media", try to specify in Class.
class Media extends Model
{
protected $table = 'medias';
}
If you want that your table is named "medias" in your model "media", you need to define protected variable like this
class Media extends Model
{
protected $table = 'medias';
}