Laravel включает в себя Eloquent — объектно-реляционный маппер (ORM), который делает работу с базой данных удобной и приятной. При использовании Eloquent каждая таблица базы данных имеет соответствующую "Модель", которая используется для взаимодействия с этой таблицей. Помимо получения записей из таблицы, модели Eloquent позволяют также вставлять, обновлять и удалять записи.
Перед началом работы убедитесь, что в файле конфигурации вашего приложения config/database.php
настроено подключение к базе данных. Для получения дополнительной информации о настройке базы данных ознакомьтесь с документацией по конфигурации базы данных.
Если вы новичок в Laravel, смело переходите к Laravel Буткемп. Laravel Буткемп проведет вас через создание вашего первого приложения на Laravel с использованием Eloquent. Это отличный способ познакомиться со всеми возможностями Laravel и Eloquent.
Для начала создадим модель Eloquent. Модели обычно находятся в каталоге app\Models
и наследуют класс Illuminate\Database\Eloquent\Model
. Вы можете использовать команду make:model
из Artisan, чтобы создать новую модель:
php artisan make:model Flight
Если вы хотите создать миграцию базы данных вместе с моделью, вы можете использовать опцию --migration
или -m
:
php artisan make:model Flight --migration
При генерации модели вы можете создать и другие типы классов, такие как фабрики, сидеры, политики, контроллеры и запросы форм. Эти опции можно комбинировать для одновременного создания нескольких классов:
# Создание модели и класса FlightFactory ...php artisan make:model Flight --factoryphp artisan make:model Flight -f # Создание модели и класса FlightSeeder ...php artisan make:model Flight --seedphp artisan make:model Flight -s # Созддание модели и класса FlightController ...php artisan make:model Flight --controllerphp artisan make:model Flight -c # Generate a model, FlightController resource class, and form request classes...php artisan make:model Flight --controller --resource --requestsphp artisan make:model Flight -crR # Generate a model and a FlightPolicy class...php artisan make:model Flight --policy # Generate a model and a migration, factory, seeder, and controller...php artisan make:model Flight -mfsc # Shortcut to generate a model, migration, factory, seeder, policy, controller, and form requests...php artisan make:model Flight --allphp artisan make:model Flight -a # Generate a pivot model...php artisan make:model Member --pivotphp artisan make:model Member -p
Иногда бывает сложно определить все доступные атрибуты и связи модели, просто просматривая её код. Вместо этого попробуйте команду model:show
Artisan, которая предоставляет удобный обзор всех атрибутов и связей модели:
php artisan model:show Flight
Глобальные области позволяют добавлять ограничения ко всем запросам для данной модели. Собственная функциональность Laravel для мягкого удаления использует глобальные области, чтобы получать из базы данных только "неудаленные" модели. Написание собственных глобальных областей может быть удобным и простым способом обеспечить применение определенных ограничений ко всем запросам для данной модели.
Чтобы создать новую глобальную область, вы можете выполнить Artisan-команду make:scope
, которая поместит сгенерированную область в каталог app/Models/Scopes
вашего приложения:
php artisan make:scope AncientScope
Написание глобальной области достаточно просто. Сначала используйте команду make:scope
, чтобы сгенерировать класс, реализующий интерфейс Illuminate\Database\Eloquent\Scope
. Интерфейс Scope
требует реализации одного метода: apply
. Метод apply
может добавлять ограничения where
или другие типы выражений к запросу по мере необходимости:
<?php namespace App\Models\Scopes; use Illuminate\Database\Eloquent\Builder;use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\Scope; class AncientScope implements Scope{ /** * Применение области к заданному конструктору запросов Eloquent.. */ public function apply(Builder $builder, Model $model): void { $builder->where('created_at', '<', now()->subYears(2000)); }}
Если ваша глобальная область добавляет столбцы в оператор select запроса, следует использовать метод addSelect
вместо select
. Это предотвратит непреднамеренную замену существующего оператора select запроса.