База данных Абитуриентов по специальностям и факультетам

PHP
В данной статье мы подробно рассмотрим поэтапный процесс разработки приложения для учёта абитуриентов, в котором будет осуществляться хранение информации об оценках по различным факультетам и специальностям. В качестве инструмента для создания приложения мы будем использовать Laravel 11 в качестве фреймворка и Filament 3 для разработки удобной административной панели. Наше приложение будет обладать функционалом CRUD (создание, чтение, обновление, удаление) для работы с данными о факультетах, специальностях и абитуриентах. Кроме того, мы добавим в приложение виджеты и отчёты, чтобы обеспечить удобство использования и анализа информации.

Задача: создать приложение имеющую структуру данных

Абитуриенты по факультетам и специальностям
ФамилияЭкзаменационные оценкиСумма баллов
МатематикаФизикаСочинение
Специальности
Код специальностиНаименованиеФакультет

Примечание: выполнить сортировку по убыванию суммы баллов с группировкой  по факультетам и специальностям, вычислить количество абитуриентов по факультетам, специальностям, по вузу.

Используемые технологии

Для решения этой задачи были использованы:

  • Laravel 11 — php фреймворк
  • Filament 3 — отличный конструктор админок для laravel
  • MySQL 8.0 — база данных
  • guava/filament-nested-resources — библиотека для создания вложенных ресурсов
  • eightynine/filament-reports — библиотека для создания отчетов

Установка проекта

Для начала установим проект и подключим нужные библиотеки

Теперь можно подключить филамент и библиотеку для вложенных ресурсов

Миграции

Создадим через консоль файлы моделей и миграций

Факультет

Специальность

Абитуриенты

Создание тестовых записей

Создадим файлы seed и factory для создания тестовых записей

Заполним созданные файлы

Заменим значения в файле database\seeders\DatabaseSeeder.php

Выполнение миграции

Создание моделей

В рамках модели «Факультет» предусмотрено единственное поле — «имя». Модель «Специальность» связана с моделью «Факультет» по принципу «один ко многим». Кроме того, существует сквозная связь с абитуриентами через hasManyThrough:

Вот и модель специальность

Модель Абитуриенты состоит из фамилии, имени и специальности. Но по заданию нужно вывести поля средний бал и полное имя.

После создания моделей выполним команду для заполнения бд

Создание ресурсов

Тут описание, как примерно должна выглядеть структура нашего проекта

Генерация файлов

Ресурсы

Чтобы настроить вложенные ресурсы, выполните следующие действия:

  1. К ресурсам (корневому и всем дочерним ресурсам), которые вы хотите встроить, добавьте признак NestedResource . Вам нужно будет реализовать метод getAncestor . Для корневого ресурса верните null, для всех дочерних ресурсов реализуйте его в соответствии с приведённой ниже документацией.
  2. На каждой странице ресурсов из 1-го шага добавьте признак NestedPage .
  3. Создайте RelationManager (документацию по нити) или RelationPage (документацию по нити) для объединения ресурсов. Добавьте признак NestedRelationManager к любому из них.

Связанные элементы

php artisan make:filament-relation-manager SpecialtyResource  abiturients last_name

Страница факультета

Страница для просмотра всех специальностей факультета

База данных Абитуриентов по специальностям и факультетам
База данных Абитуриентов по специальностям и факультетам

Страница для создания специальности на факультете

База данных Абитуриентов по специальностям и факультетам

Страница для просмотра всех студентов факультета

База данных Абитуриентов по специальностям и факультетам

Создание страницы для редактирования абитуриента факультета

База данных Абитуриентов по специальностям и факультетам

В остальных страницах ListFaculty,EditFaculty,CreateFaculty — добавим use NestedPage;

Теперь изменим ресурс факультета .app\Filament\Resources\FacultyResource.php

Добавим в ресурс NestedResource

Теперь необходимо реализовать метод getAncestor и getBreadcrumbRecordLabel для изменения названия факультета в хлебных крошках

Так же добавим метод getRecordSubNavigation для управления специальностями и абитуриентами факультета.

Ресурс и страницы специальностей

Прописываем NestedPage во всех страницах специальности. Нужно удалить ListSpecialties в папке Pages

База данных Абитуриентов по специальностям и факультетам

Создадим страницу создания абитуриентов

База данных Абитуриентов по специальностям и факультетам

Настроим Relation Manager app\Filament\Resources\SpecialtyResource\RelationManagers\AbiturientsRelationManager.php

База данных Абитуриентов по специальностям и факультетам

Настроим ресурс app\Filament\Resources\SpecialtyResource.php

Добавим use NestedResource;

И связанные ресурсы и хлебные крошки

Ресурс Абитуриентов

Добавим поля для таблицы и формы

app\Filament\Resources\AbiturientResource.php

Вход в систему и просмотр результата

Запустим браузер и войдем в созданную админку

Если все было создано без ошибок то нас ждет примерно такой результат:

База данных Абитуриентов по специальностям и факультетам
База данных Абитуриентов по специальностям и факультетам
База данных Абитуриентов по специальностям и факультетам
База данных Абитуриентов по специальностям и факультетам
База данных Абитуриентов по специальностям и факультетам
База данных Абитуриентов по специальностям и факультетам

Создание отчета

Для генерации отчета установим нужный пакет и создадим файл с первым отчетом

База данных Абитуриентов по специальностям и факультетам
app\Filament\Reports\AbiturientsReport.php

Не забудь подключить плагин в файле app\Providers\Filament\AdminPanelProvider.php

База данных Абитуриентов по специальностям и факультетам

Отчет можно найти в основном меню

База данных Абитуриентов по специальностям и факультетам

Создание виджетов

В нашем случаем мы создадим виджет для просмотра количества и два виджета с таблицей, в которой будет информация по факультетам и специальностями

Виджет статистики

База данных Абитуриентов по специальностям и факультетам

Вот и код виджета:

Виджет количество абитуриентов по факультетам

Теперь мы рассмотрим создание виджета, который будет отображать количество абитуриентов по факультетам. Этот виджет будет полезен для администрации университета, чтобы отслеживать количество поступающих на каждый факультет.

База данных Абитуриентов по специальностям и факультетам

Выполним в консоли команду и настроим заполнение нашего виджета

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

Рассмотрим создание виджета, который будет отображать количество абитуриентов по специальностям. Виджет имеет фильтр для выбора конкретного факультета.

База данных Абитуриентов по специальностям и факультетам

Создадим файл и наполним его

Заключение

Поздравляем, база данных успешно создана! Теперь у нас есть мощная система, позволяющая выполнять ключевые операции:

  • Создание, изменение и удаление факультетов.
  • Создание, изменение и удаление специальностей.
  • Создание, изменение и удаление абитуриентов.
  • Формирование отчетов по оценкам абитуриентов.
  • Вычисление количества абитуриентов по факультетам, специальностям и вузу.

Эта база данных представляет собой фундамент для дальнейшего развития. Вот несколько идей для ее улучшения:

  • Внедрение системы авторизации и управления правами доступа.
  • Добавление функции отслеживания успеваемости студентов.
  • Реализация возможностей для управления учебными курсами и модулями.
  • Интеграция с внешними сервисами для автоматизации процессов.
Добавить комментарий