gpt4 book ai didi

php - 在 Eloquent 的查询范围内使用计算值

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:42 25 4
gpt4 key购买 nike

我有两个 Eloquent 模型,CampLevel

Camp 有一个开始 和一个结束 日期字段。

Level 有一个 min_age 和一个 max_age 整数字段。

一个级别与多个营地相关

使用查询范围和日期参数 $dob,我想获取 Camp 的集合,其中出生日期为 $dob 的人的年龄 将在 开始 日期介于 min_agemax_age 之间。

换句话说(一些伪代码):

select * from Camps
join Levels on Camps.level_id = Levels.id
where min_age <= (start - $dob)->toYears <= max_age

是否可以使用查询范围,并且可能不使用任何原始查询?大概是这样?

public function scopeAgeAppropriate($query, $dob) {
return $query->join('Levels', 'Camps.level_id', '=' ,'Levels.id')
->where('min_age', '<=', start->diffInYears($dob))
->where('max_age', '>=', start->diffInYears($dob));
}

最佳答案

通过关系查询 whereHas() 并使用 TIMESTAMPDIFF 即时计算年龄:

您的范围将是:

public function scopeAgeAppropriate($query, $dob) {
return $query->whereHas('levels',function($q) use ($dob) {
return $q->where('min_age', '<=', \DB::raw("TIMESTAMPDIFF(YEAR, '{$dob}', Camps.start)"))
->where('max_age', '>=', \DB::raw("TIMESTAMPDIFF(YEAR, '{$dob}', Camps.start)"));
})

}

关于php - 在 Eloquent 的查询范围内使用计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com