Я новичок в Laravel. Итак, если я могу генерировать таблицы с помощью Schema builder, а затем запрашивать данные с помощью таких запросов, как DB::table('user')->find(1)
, где Eloquent подходит для всей сцены? Какой цели это служит?Laravel: Разница между создателем схемы и красноречивым кем-нибудь?
ответ
Eloquent - это имя, присвоенное ORM (Object-relational mapping), которое поставляется с Laravel. Eloquent позволяет вам взаимодействовать со своими столами, как если бы они были объектами, однако Eloquent не знает о фактических столбцах, которые у вас есть на вашем столе.
Рассмотрим простую модель User
. Мы хотим, чтобы эта модель запрашивала записи в нашей таблице users
.
class User extends Eloquent {
protected $table = 'users';
}
То есть очень простая модель. Теперь вместо запроса так.
$user = DB::table('user')->find(1);
Вы можете запросить вот так.
$user = User::find(1);
Eloquent сам использует свой собственный построитель запросов, но возвращается к стандартному построителю запросов. Это означает, что для него доступны все методы в построителе запросов и т. Д.
Преимущества здесь:
- Вам не нужно указывать свое имя таблицы при каждом вызове.
- Код читает намного лучше, это синтаксический сахар.
- Вы можете создавать сложные отношения между таблицами и использовать загружаемую загрузку.
- Вы можете использовать такие функции, как защита от массового присвоения и сеттеры/приемник.
- Вы получаете все преимущества использования построителя запросов, так что вы можете легко переключаться между СУБД.
Я только коснулся Красноречивого. Это гораздо больше. Я предлагаю вам взглянуть на следующие ресурсы.
ты хотел сказать, что я создавать красноречивые модели вручную после создания таблицы с помощью схемы строитель, если я хочу использовать красноречив? –
Это правильно. –
Если вы используете Laravel 5, команда 'php artisan make: model User' создаст как заглушку миграции для построителя схемы, так и модель User. После создания вы можете изменить оба, чтобы заполнить пробелы (т. Е. Любые оставшиеся столбцы, отношения и т. Д.). – Jason