Как реализовать "журнал событий"?
Мне нужно реализовать этот журнал событий, в котором мне нужно трекать следующие действия с вакансиями: создание, редактирование, смена статуса(активна, скрыта), удаление, предложения вакансии соискателю. Структуру таблицы для событий я примерно представляю, загвоздка в другом. Мне нужно сделать их мультиязычными, и я ума не приложу как это сделать. То ли хранить в колонке типа JSONB вариации перевода сообщения, а при генерации события эти поля забивать(так на фронте их будет выводить проще), то ли на фронте отслеживать действие и в зависимости от него выводить подходящий шаблон. Больше конечно склоняюсь к первому. Еще думаю что мне в решении этого вопроса помогут встроенные в Laravel: События и Слушатели. Буду рад любой помощи и подсказке
Дополнительно:
Выделить варианты сообщений и писать в лог только ID. Прочие подробности сообщения (вроде названия отредактированной вакансии) писать в другую ячейку, которая переводиться не будет.
Ответы:
В базе храните ключи (enum) типа действия.
Добавьте ключи в локализацию.
Добавьте cast в модель и измените toArray() (метод сериализации) чтобы возвращал локализованные значения.
пример enum
enum JournalAction: string { case Edit = 'edit'; case Add = 'add'; public function translated($replacements=[]): string { return Lang::get('journal.' . $this->value,...$replacements); } } |
enum JournalAction: string { case Edit = 'edit'; case Add = 'add'; public function translated($replacements=[]): string { return Lang::get('journal.' . $this->value,...$replacements); } }
Идентификаторы вакансии и пользователя храните в поле jsonb. (как делать их локализацию - совсем другой вопрос). Хранение их локализованного значения в журнале в виде строк может стать проблемой когда название или имя изменится (или из локализация).
https://laravel-auditing.com/
Позволяет записывать все изменения моделей автоматически, а дальше просто выводи в том виде в котором нужно
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для реализации "журнала событий" веб-приложении можно использовать базу данных для хранения информации о каждом событии. В данном случае, я рассмотрю пример реализации "журнала событий" на PHP с использованием MySQL базы данных.
1. Создание таблицы для хранения событий в базе данных:
CREATE TABLE events ( id INT AUTO_INCREMENT PRIMARY KEY, event_name VARCHAR(255), event_description TEXT, event_date TIMESTAMP );
2. Добавление нового события в журнал:
function addEvent($eventName, $eventDescription) { $conn = new mysqli("localhost", "username", "password", "database"); $eventName = $conn->real_escape_string($eventName); $eventDescription = $conn->real_escape_string($eventDescription); $sql = "INSERT INTO events (event_name, event_description, event_date) VALUES ('$eventName', '$eventDescription', NOW())"; $result = $conn->query($sql); if ($result) { echo "Event added successfully"; } else { echo "Error: " . $conn->error; } $conn->close(); }
3. Получение всех событий из журнала:
function getEvents() { $conn = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM events ORDER BY event_date DESC"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "Event ID: " . $row["id"] . "<br>"; echo "Event Name: " . $row["event_name"] . "<br>"; echo "Event Description: " . $row["event_description"] . "<br>"; echo "Event Date: " . $row["event_date"] . "<br><br>"; } } else { echo "No events found"; } $conn->close(); }
4. Вызов функций добавления и получения событий:
// Добавление нового события addEvent("New Event", "Description of the new event"); // Получение всех событий getEvents();
Это базовый пример реализации "журнала событий" на PHP с использованием MySQL базы данных. В зависимости от требований проекта, функциональности могут быть расширены или изменены.