База данных Автовокзал(PHP,Laravel, Filament 3)

PHP
Нужно создать базу данных «Автовокзал» в используя фреймворк laravel, админку filament и mysql, заполнить ее данными и создать отчет по таблицам «Маршруты» и «Рейсы».

Постановка задачи:

Нужно создать базу данных «Автовокзал» в используя фреймворк laravel, админку filament и mysql, заполнить ее данными и создать отчет по таблицам «Маршруты» и «Рейсы».

Схема данных 

База данных Автовокзал(PHP,Laravel, Filament 3)

Миграции для создании таблиц в БД

Выполним команды в консоли:

php artisan make:model Destination -m
php artisan make:model Schedule -m
php artisan make:model Route -m
php artisan make:model Stop -m
php artisan make:model Bus -m
php artisan make:model Trip -m
image.png

Для создания миграций в Laravel, соответствующих моделям автовокзала, можно использовать следующие примеры:

Миграция для таблицы destinations (Пункты назначения)

Миграция для таблицы schedules (Дни движения)

Миграция для таблицы routes (Маршруты)

Миграция для таблицы stops (Остановки)

Миграция для таблицы buses (Автобусы)

Миграция для таблицы trips (Рейсы)

Модели для Laravel

Для реализации сущностей автовокзала в Laravel, можно создать следующие модели:

Destination (Пункт назначения)

Schedule (Дни движения)

Route (Маршрут)

Stop (Остановка)

Bus (Автобус)

Trip (Рейс)

Запускаем миграцию

php artisan migrate
image.png

База данных создана. Приступим к её наполнению. Создадим интерфейс для ввода информации

Установка Filament 3

Устанавливаем конструктор панелей Filament, выполнив следующие команды в каталоге вашего проекта Laravel:

composer require filament/filament -W
php artisan filament:install --panels
Создайте пользователя

Вы можете создать новую учетную запись пользователя с помощью следующей команды:

php artisan make:filament-user

Откройте /admin в своем веб-браузере, войдите в систему и начните создавать свое приложение!

Генератор ресурсов

Выполним в консоли следующие команды, которые создадут нам ресурсы для редактирования наших моделей

php artisan make:filament-resource Stop --generate --simple
php artisan make:filament-resource Bus --generate --simple
php artisan make:filament-resource Trip --generate --simple
php artisan make:filament-resource Destination --generate --simple
php artisan make:filament-resource Stop --generate --simple
php artisan make:filament-resource Route --generate

После создания ресурсов так будет выглядеть наше меню

image.png

Отредактируем сгенерированные ресурсы

image.png

В ресурсах автобусов все поля сгенерировались автоматически, их менять не нужно

Поменяем только название, иконку и группу ресурса

protected static ?string $navigationIcon = 'heroicon-c-truck';
protected static ?string $pluralModelLabel = 'Автобусы';
protected static ?string $navigationGroup = 'Справочники';
image.png

В пунктах назначения все поля сгенерировались автоматически, меняем только название и иконку

protected static ?string $navigationIcon = 'heroicon-s-building-storefront';
protected static ?string $pluralModelLabel = 'Пункты назаначения';
protected static ?string $navigationGroup = 'Справочники';
image.png

В таблицах маршрутов заменим сгенерированные столбцы на:

  • TextColumn::make(‘departure.name’)
  • TextColumn::make(‘destination.name’)
  • TextColumn::make(‘schedule.days’)

В форме редактирования заменим сгенерированные поля на наши:

  • Пункт отправления выбирается из справочника:
  • Пункт назначения выбирается из справочника
  • Дни движения можно будет не только выбрать из бд, но и добавить новую и отредактировать
  • Ну и время в пути поменяем на поле выбора времени
image.png

app\Filament\Resources\RouteResource.php

image.png

В ресурсах остановки в таблицах меняем поля route_id с TextInput на  Select со связью relationship(name: 'route') и отображением сборного имении через функцию getOptionLabelFromRecordUsing()

В табличном виде заменяем имя маршрута на TextColumn::make(‘routeName’)

app\Filament\Resources\StopResource.php
image.png

В рейсах мы добавили вывод добавленного атрибута в моделях. На форме есть реактивное обновление полей дата прибытия меняется в зависимости от маршрута и времени выезда. Так же были изменены обычные textinput на select со связью с объектами

app\Filament\Resources\TripResource.php

Настройка Dashboard

Создадим числовой виджет

image.png

Командой создадим виджет статистики

php artisan make:filament-widget StatsOverview --stats-overview

в созданном файле добавим

Отчет Маршруты и Рейсы

Добавим кнопку выгрузить отчет в ресурс маршруты

image.png

Установим через composer библиотеку для формирования pdf отчетов — barryvdh / laravel-dompdf 

composer require barryvdh/laravel-dompdf

Создадим blade шаблон для нашего отчета

resources\views\tripreport.blade.php

Теперь можно добавить кнопку и действие для выгрузки отчета. В файле app\Filament\Resources\TripResource\Pages\ManageTrips.php добавим новый Action, который запросит все рейсы и передаст их в наш шаблон

После нажатия кнопки будет сохранен документ pdf и выйдет уведомление.

Вот пример отчета:

image.png

Заключение

Созданный проект позволяет вносить данные в базу данных и сохранять отчет в PDF. Это приложение было создано в ознакомительных целях, для изучения возможностей Laravel и Filament 3.

Добавить комментарий