В базе данных 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 * from
people)
Если в модели 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
просто не существует :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите, пожалуйста, на простом примере, как вывести список зарегистрированных пользователей из БД, используя поиск по двум критериям,...
вывожу через singlephp записи по категориям