Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 15.08.2022 13:15:03

Помогите найти решение с определением возрастной категории человека

Версия Laravel: 8
Версия PHP: 7.4

Необходимо определить возрастную категорию человека на основании возрастного диапазона который находится в другой таблице:
    Есть таблица 1 в которой содержаться данные о дате рождения,
   
    в таблице 2 содержаться:
        название возрастной категории,
        стартовый возраст категории,
        конечный возраст категории.
   
    Пытаюсь понять как сделать так что бы при получении данных из таблицы 1, рассчитать возраст человека, сравнить его с диапазоном возрастов из таблицы 2, и подставить название возрастной категории
    советующей возрасту человека в итоговую коллекцию.

Не в сети

#2 19.08.2022 10:30:20

Re: Помогите найти решение с определением возрастной категории человека

Для того, чтобы проще решать подобны задачи попробуй составить запрос на SQL, который вернёт нужный тебе результат, а затем попробуй переписать его при помощи Eloquent. Если не получится - всегда можешь использовать DB::raw(), но так у тебя будет возможность конкретизировать свои вопросы и уточнить, что конкретно не получается.

Не в сети

#3 22.08.2022 08:20:05

Re: Помогите найти решение с определением возрастной категории человека

Если решать на уровне базы, то понадобится формула для вычисления возраста и связь таблиц через неравенство, например через выражение 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.

Не в сети

Подвал раздела