Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Версия Laravel: 8
Версия PHP: 7.4
Необходимо определить возрастную категорию человека на основании возрастного диапазона который находится в другой таблице:
Есть таблица 1 в которой содержаться данные о дате рождения,
в таблице 2 содержаться:
название возрастной категории,
стартовый возраст категории,
конечный возраст категории.
Пытаюсь понять как сделать так что бы при получении данных из таблицы 1, рассчитать возраст человека, сравнить его с диапазоном возрастов из таблицы 2, и подставить название возрастной категории
советующей возрасту человека в итоговую коллекцию.
Не в сети
Для того, чтобы проще решать подобны задачи попробуй составить запрос на SQL, который вернёт нужный тебе результат, а затем попробуй переписать его при помощи Eloquent. Если не получится - всегда можешь использовать DB::raw(), но так у тебя будет возможность конкретизировать свои вопросы и уточнить, что конкретно не получается.
Не в сети
Если решать на уровне базы, то понадобится формула для вычисления возраста и связь таблиц через неравенство, например через выражение BETWEEN. Важно чтобы значения в определении возрастной категории не пересекались и не содержали "дыр".
Нашел такие формулы для возраста на текущий момент:
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), users.dob)), '%Y')+0
или
TIMESTAMPDIFF(YEAR, dob, NOW())
А запрос в целом получился такой:
SELECT u.id, u.user_name, u.age, ages.age_title
FROM (
SELECT users.*, timestampdiff(YEAR, users.dob, now()) AS age
FROM users
) AS u
LEFT JOIN ages ON u.age BETWEEN ages.age_from AND ages.age_to
left join здесь на случай если у нас не описана какая-то возрастная категория, но мы не хотим терять в выводе пользователя.
https://www.db-fiddle.com/f/tXjJazKZT7wqjyqr4MoNx8/0
Изменено artoodetoo (22.08.2022 08:29:14)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети