从 laravel 的日期差异中获取年龄小于的所有记录
Get all records where age is less than from a date difference in laravel
我正在尝试获取所有年龄小于 5 岁的儿童的记录。
计算年龄的日期应该是未来的日期,例如 2021-08-12
$date 和 $age 是自定义的。
$date 可以是任何未来日期,$age 是一个数字(例如 5)
我已经写了以下内容,但它不起作用。
$children=Child::whereRaw('DATEDIFF('.$date.', date_of_birth) < '.$age.'')
->get();
此处date_of_birth是数据库中的一列。
您可以使用whereBetween
方法。并将其与 now()
或任何其他日期时间
进行比较
Child::whereBetween('date_of_birth', [now()->subYears(5), now()])->get();
调试后终于找到了解决办法。问题是 $date 没有作为字符串传递,因此没有找到天数,我不得不将天数转换为年数。这可能对某人有帮助。
$children=Child::whereRaw('(DATEDIFF("'.$date.'",date_of_birth)/365) < '.$age.'')
->get();
避免原始表达式和复杂查询您可以使用虚拟列
1.Add 在 created_at
列 之后将此添加到您的迁移,或者您可以创建新的迁移
$table->char('date_of_birth_year',3)->virtualAs('DATE_FORMAT(FROM_DAYS(DATEDIFF(CURRENT_DATE, date_of_birth)),"%y")');
运行 你的迁移
现在您可以运行以下查询来获取在特定月份创建的记录
$yearsOld = ['01', '02', '03', '04'];
$childrens = Child::query()
->whereIn('date_of_birth_year', $yearsOld)
->get();
如果您想了解更多信息,请查看以下链接
我正在尝试获取所有年龄小于 5 岁的儿童的记录。
计算年龄的日期应该是未来的日期,例如 2021-08-12
$date 和 $age 是自定义的。
$date 可以是任何未来日期,$age 是一个数字(例如 5)
我已经写了以下内容,但它不起作用。
$children=Child::whereRaw('DATEDIFF('.$date.', date_of_birth) < '.$age.'')
->get();
此处date_of_birth是数据库中的一列。
您可以使用whereBetween
方法。并将其与 now()
或任何其他日期时间
Child::whereBetween('date_of_birth', [now()->subYears(5), now()])->get();
调试后终于找到了解决办法。问题是 $date 没有作为字符串传递,因此没有找到天数,我不得不将天数转换为年数。这可能对某人有帮助。
$children=Child::whereRaw('(DATEDIFF("'.$date.'",date_of_birth)/365) < '.$age.'')
->get();
避免原始表达式和复杂查询您可以使用虚拟列
1.Add 在 created_at
列 之后将此添加到您的迁移,或者您可以创建新的迁移
$table->char('date_of_birth_year',3)->virtualAs('DATE_FORMAT(FROM_DAYS(DATEDIFF(CURRENT_DATE, date_of_birth)),"%y")');
运行 你的迁移
现在您可以运行以下查询来获取在特定月份创建的记录
$yearsOld = ['01', '02', '03', '04'];
$childrens = Child::query()
->whereIn('date_of_birth_year', $yearsOld)
->get();
如果您想了解更多信息,请查看以下链接