如何解决根据一列和给定值的日期差异在 2 个表上进行雄辩检索
我有一个查询问题,我使用的是 Laravel 8,我的两个表如下:
- 人民:
- id
- 姓名
- 出生日期(日期)
- is_visible
- 其他领域
- 类别:
- id
- 姓名
- min_age
- max_age
如果 date_of_birth
与当年最后一天的差在 min_age
和 max_age
之间,我想选择所有具有类别名称的人,并将集合除以类别名称。
您有什么建议吗?
感谢您的帮助。
解决方法
我将假设以下内容:
- 没有模型。
-
peoples.date_of_birth
具有以下格式:(YYYY-MM-DD) -
categories.min_age
和categories.max_age
是整数。
$categories = DB::table('categories')->get();
$people = DB::table('people')->cursor();
$people = $people->groupBy(function ($person) use ($categories) {
// datediff in years using Carbon
$dob = Carbon::createFromFormat('Y-m-d',$person->date_of_birth); // use $person->date_of_birth directly if it's already a Carbon object
$years = (int) $dob->diff(now()->endOfYear())->format('%Y');
$category = $categories->filter(fn($category) => ($category->min_age <= $years && $years <= $category->max_age));
return $category->isEmpty() ? 'Category not found' : $category->first()->name;
})
->collect();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。