Получение пользователей по возрасту с помощью столбца даты рождения пользователя из таблицы

Краткий:

У меня есть пользовательский столбец birthdate в моей таблице users. Дата рождения пользователя имеет формат даты по умолчанию: Y-m-d. Кроме того, у меня есть собственный мутатор для определения возраста пользователя в модели User.

Код мутатора:

public function getAgeAttribute($value) {
    if ($this->birthday !== null) {
        $bday = new \DateTime("{$this->birthday}");
        $today = new \Datetime(date('Y-m-d'));
        $diff = $today->diff($bday);

        return $diff->y;
    }

    return null;
}

Вопрос:

Как получить пользователей по возраст, используя модель User?

что значит by age? вы имеете в виду, что хотите получить всех пользователей старше 20 лет?

hassan 29.10.2018 09:11

Да конечно @hassan

Andreas Hunter 29.10.2018 09:12

какой тип столбца? дата / время / дата?

hassan 29.10.2018 09:13

Строка типа столбца. Если вы думаете, что измените тип поля на дату со строки, я изменю его. @hassan

Andreas Hunter 29.10.2018 09:16

вы можете использовать для этого локальную область видимости.

Wreigh 29.10.2018 10:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
5
1 722
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

Users::where('birthday', '<=', date('Y-m-d', strtotime('-20 years')))->get();

Добавляя к этому ответу, эта логика может быть заключена в локальную область видимости, определенную в модели User.

Wreigh 29.10.2018 10:17

Вы можете использовать метод CollectiongroupBy для группировки пользователей по их возрасту.

$users = User::all()->groupBy(function($user) {
             return $user->age;
         });

Затем вы можете получить всех пользователей для определенного пользователя, как это.

$users->get(20);

Надеюсь, это то, что вы ищете.

Надеюсь, это поможет вам, функция date() - это функция php, которая преобразует строку в дату и время.

$users = User::where('birthdate' , '<', date('Y-m-d', strtotime('your input field name')))->get();

Если вы используете MySQL, есть альтернатива:

 $users = User::whereDate('birthdate' , '<', \DB::raw("CURDATE()-INTERVAL 20 YEAR"))->get();

Мы также можем сделать это таким образом, мы увеличим еще на один год и будем искать между датами, подобными этой

$from = Carbon::today()->subYears($request->age);
$to = Carbon::today()->subYears(($request->age)+1);
$users->whereBetween('birth_date',[$to, $from]);`

я думаю, что это лучший подход

Muhammad Inaam Munir 05.03.2020 11:25

Другие вопросы по теме