Від doc laravel, він стверджує:
Тепер давайте подивимось на приклад
Flight
модель, яку ми будемо використовувати для отримання та зберігання інформації з нашоїflights
таблиця бази даних
Тому я написав:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Media extends Model
{
//
}
І контролер:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpRequests;
use AppMedia;
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
як сказано в документі. То чому саме такі помилки траплялися? Чи випадково я відкриваю прапор опції, який змінив відображення імені за замовчуванням від моделі до таблиці чи щось подібне?
Будь-яке пропозицію буде оцінено.
Навколишнє середовище:
- Версія 5.243 Laravel Framework
- PHP 7.0.8-2 + deb.sury.org ~ xenial + 1
Відповіді:
4 для відповіді № 1Як сказав @FrankProvost, Laravel (насправді Вчення) досить розумний і має твердо кодовані слова, які не слід набирати:
....
"Kongoese", "Lucchese", "mackerel", "Maltese", ".*?media",
....
Отже, користуйся media
стіл або використання protected $table
змінна на силу medias
назва таблиці.
0 для відповіді № 2
Якщо ви хочете, щоб ваша таблиця була названа "medias" у вашій моделі "media", спробуйте вказати в Class.
class Media extends Model
{
protected $table = "medias";
}
0 для відповіді № 3
Якщо ви хочете, щоб ваша таблиця була названа "medias" у вашій моделі "media", вам потрібно визначити захищену змінну, як це
class Media extends Model
{
protected $table = "medias";
}