如何获得具有上一个和下一个最大值的模型属性值?
假设我有一个user
模型,其中有一列用于age
。我现在想知道用户x
的年龄,以及最近的上一个和下一个年龄值。
$age = User::find($id)
在您发布的代码中,$age
当前是User
实例或null
,所以这并没有多大作用。
如果age
是users
表上的一列,那么您可以执行以下操作:
$age = User::findOrFail($id)->age;
try {
return User::where('age', '<', $age)
->orderBy('age', 'DESC')
->firstOrFail()
->age;
} catch (ModelNotFoundException $mnfe) {
return null; // Or similar
}
try {
return User::where('age', '>', $age)
->orderBy('age', 'ASC')
->firstOrFail()
->age;
} catch (ModelNotFoundException $mnfe) {
return null; // Or similar
}
使用$age
(让我们想象一下30(作为参考点:
对于年轻人:
- 查询年轻人(
'age' < 30
( - 从29到0排序(
DESC
( - 找到第一个(如果没有,则失败(
- 返回该用户的
age
- 查询年轻人(
对于老年人:
- 查询年龄较大的人(
'age' > 30
( - 将它们从30排序到∞(
ASC
( - 找到第一个(如果没有,则失败(
- 返回该用户的
age
- 查询年龄较大的人(
旁注,此代码可以作为getPreviousAge($age)
、getNextAge($age)
等函数进入控制器或模型。