В базе данных land есть таблицы peoples и pages.
Также есть модели People и Page.
People.php
class People extends Model
{
// protected $table = 'peoples';
}
...
Page.php
class Page extends Model
{
//
}
В контроллере пытаюсь показать все записи через модели People и Page,
маршрут
Route::get('/', ['as'=>'home','uses'=>'IndexController@show']);
контроллер
class IndexController extends Controller
{
public function show() {
$pages = Page::all();
dump($pages);
$people = People::all();
dump($people);
}
}
но записи из таблицы pages нормально отображаются с помощью dump, а записи из таблицы peoples не отображаются, выдаёт ошибку:
Base table or view not found: 1146 Table 'land.people' doesn't exist (SQL: select * frompeople)
Если в модели People добавить protected $table = 'peoples'; то ошибка пропадает, но хотелось-бы понять, из-за чего ошибка, две модели практически идентичны.
Почему в модели people появляется ошибка?
Так происходит, потому что правила создания таблиц и моделей в laravel следующие:
Модель - ед.ч Таблица - мн.ч
Если углубиться в изучение англ языка и попытаться понять причину, то можно найти, что
Page - страница (ед.ч), Pages (мн.ч) - страницы (ларавель приводит page во мн.ч)
people - люди (мн.ч хотя по правилам должно быть ед.ч), а peoples - НАРОД (это не является множественным числом от слова people!).
В результате laravel оставляет people так как есть так как оно уже является мн.ч! и ищет land.people в Вашей БД. Слово person (ед.ч) - people (мн.ч) <- данное преобразование является верным!
class People extends Model
{
// protected $table = 'peoples';
}
По умолчанию в фреймворках предусмотрено, что если вы не указываете в экземпляре класса свойство, или метод, описывающий имя таблицы, которую использует данный класс - то автоматически берет имя таблицы равное названию класса, в вашем случае people. Из этого выходит что вы зря закомментировали строчку, т.к. она определяет с какой таблицей вам работать. Есть два варианта решения вашей проблемы:
People в Peoples - плохое решение, т.к. лучше задавать названия моделей и соответсвующих таблиц в единственном числеpeoples в peopleА если быть еще честнее, то People - это и есть "Люди", поэтому слова Peoples просто не существует :)