Od doc of laravel, Twierdzi:
A teraz spójrzmy na przykład
Flight
model, którego użyjemy do pobierania i przechowywania informacji z naszego serwisuflights
tabela bazy danych
Napisałem więc:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Media extends Model
{
//
}
I kontroler:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpRequests;
use AppMedia;
class MediaController extends Controller
{
public function index() {
return view("medias.index")->with("medias", Media::all());
}
}
Ale kiedy pytam MediaController@index
, daje ten błąd:
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`)
Wymaga tabeli o nazwie media
zamiast medias
jak powiedział dokument. Dlaczego pojawiły się te błędy? Czy przypadkowo otwieram flagę opcji, która zmieniła domyślne mapowanie nazw z modelu na tabelę lub coś podobnego?
Wszelkie sugestie zostaną docenione.
Środowisko:
- Laravel Framework wersja 5.2.43
- PHP 7.0.8-2 + deb.sury.org ~ xenial + 1
Odpowiedzi:
4 dla odpowiedzi № 1Jak powiedział @FrankProvost, Laravel (Doctrine, faktycznie) jest wystarczająco inteligentny i ma zakodowane słowa, których nie należy odmieniać:
....
"Kongoese", "Lucchese", "mackerel", "Maltese", ".*?media",
....
Tak więc użyj media
stół lub wykorzystanie protected $table
Zmienna do wymuszenia medias
Nazwa tabeli.
0 dla odpowiedzi nr 2
Jeśli chcesz, aby Twój stół miał nazwę "media" w twoim modelu "media", spróbuj podać w klasie.
class Media extends Model
{
protected $table = "medias";
}
0 dla odpowiedzi № 3
Jeśli chcesz, aby Twój stół nosił nazwę "media" w twoim modelu "media", musisz tak zdefiniować chronioną zmienną
class Media extends Model
{
protected $table = "medias";
}